Java 中的 equals() 与 ==
在 Java 中,判断两个对象是否相等有两种方法:equals() 方法和 == 运算符。equals() 方法比较两个对象的內容。== 运算符比较两个对象的引用。
使用 new 运算符创建对象时,它会在堆中分配一个指定的内存位置。例如,两个对象具有相同的数据。即使这两个对象存储在内存的不同部分,equals() 方法也会返回 true。
如果两个对象存储在内存的完全相同的位置,则 == 运算符返回 true。
.equals() 和 == 的区别
方面 |
.equals() 方法 |
== 运算符 |
---|---|---|
定义 |
.equals() 方法是 java.lang.Object 类的一部分。 |
== 运算符是 Java 中的比较运算符。它适用于基本数据类型和对象。 |
比较重点 |
.equals() 用于比较对象的內容。例如,比较两个字符串的字符或两个整数的数值。 |
== 运算符检查两个对象是否引用相同的内存位置,从而确定它们是否为同一个对象。 |
行为定制 |
可以在领域对象中为 .equals() 方法定义自定义行为。例如,可以设置自定义条件来判断两个 Employee 对象是否相等。 |
== 运算符的行为不能改变。 |
条件更改 |
.equals() 方法可以被重写以指定对象相等性的条件。 |
== 运算符的行为保持静态且不可更改。 |
.equals() 方法
Java 中的 String equals() 函数根据字符串的数据/内容评估两个字符串。如果两个字符串的所有内容都匹配,则返回 true;如果不匹配,则返回 false。
.equals()
代码创建线程和字符串对象,然后使用 == 比较它们的引用,所有比较都返回 false。它使用 .equals() 比较字符串内容,对于内容匹配的字符串返回 true。
算法
步骤 1:生成一个名为“t1”的新线程实例。
步骤 2:创建另一个名为“t2”的新线程实例。
步骤 3:将“t2”的引用赋值给“t3”线程引用。
步骤 4:创建两个新的 String 实例:“s1”和“s2”,内容为“Tutorials”。
步骤 5:使用“==”运算符查看“t1”和“t2”是否具有相同的引用。打印此比较的结果 (false)。
步骤 6:再次使用“==”运算符比较“t1”与“t2”是否具有相同的引用。打印此比较的结果 (false)。
步骤 7:使用“==”运算符检查引用“s1”和“s2”是否相同。打印此比较的结果 (false)。
步骤 8:使用“equals”方法比较“t1”是否等于自身。打印此比较的结果 (true)。
步骤 9:使用“equals”方法比较“s1”的内容是否等于“s2”的内容。打印此比较的结果 (true)。
步骤 10:程序结束。
示例
public class Tutorialspoint { public static void main(String[] args) { Thread t1 = new Thread(); Thread t2 = new Thread(); Thread t3 = t2; String s1 = new String("Tutorials"); String s2 = new String("Tutorials"); System.out.println(t1 == t2); System.out.println(t1 == t2); System.out.println(s1 == s2); System.out.println(t1.equals(t1)); System.out.println(s1.equals(s2)); } }
输出
false false false true true
== 运算符
所有基本类型,例如布尔类型,都受相等运算符的约束。对于对象类型,相等运算符也适用。
以下代码的输出表明,不同整数、字符和浮点值的比较返回 false。但是相同布尔值的比较返回 true。
算法
步骤 1:使用“==”运算符比较整数 30 是否等于整数 40。打印此比较的结果 (false)。
步骤 2:查看字符 'x' 是否等于字符 'y'。为此,我们使用“==”运算符。打印此比较的结果 (false)。
步骤 3:使用“==”运算符比较字符 'x' 是否等于浮点值 35.0。打印此比较的结果 (false)。
步骤 4:使用“==”运算符比较布尔值 true 是否等于布尔值 true。打印此比较的结果 (true)。
步骤 5:程序结束。
示例
public class Test { public static void main(String[] args) { System.out.println(30 == 40); System.out.println('x' == 'y'); System.out.println('x' == 35.0); System.out.println(true == true); } }
输出
false false false true
结论
.equals() 方法比较两个对象的內容。另一方面,== 运算符比较对象的内存地址。我们查看了每种方法的示例,以了解其区别。