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() 方法比较两个对象的內容。另一方面,== 运算符比较对象的内存地址。我们查看了每种方法的示例,以了解其区别。

更新于:2023年8月29日

517 次浏览

启动您的 职业生涯

完成课程获得认证

开始学习
广告