equals()与在Java中的区别
在Java中,有两种方法可以确定两个对象是否相等:.equals()方法和运算符。.equals()函数比较两个对象的内容。操作符比较两个对象的引用。
当你使用new运算符创建一个对象时,它会被分配一个指定的内存位置在堆中。例如,假设两个对象具有相同的数据。即使这两个对象在内存的不同部分中,.equals()方法仍将返回true。
如果两个对象被存储在内存中的完全相同位置,操作符将返回true。
.equals()和之间的区别
方面 | .equals() 方法 | 运算符 |
---|---|---|
定义 | .equals() 方法是 java.lang.Object 类的一部分。 | 运算符是 Java 中的比较运算符。它适用于原始数据类型和对象。 |
比较重点 | .equals() 用于与对象的内容进行比较。例如,比较两个字符串的字符或两个整数的数值。 | 运算符检查两个对象是否引用同一内存位置,从而确定它们是否为同一个对象。 |
行为定制化 | 可以为域对象中的 .equals() 方法定义自定义行为。例如,可以为何时认为两个员工对象相等设置自定义条件。 | 运算符的行为无法改变。 |
条件修改 | 可以覆盖 .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()方法比较两个对象的内容。而运算符比较对象的内存地址。我们已经通过各个方法的示例来理解这些区别。