“.equals”和“==”有什么区别?

2022-08-31 15:08:10

我今天换了讲师,他用一个奇怪的代码对我说。(他说最好使用,当我问为什么时,他回答说“因为它是!”.equals

下面是一个示例:

if (o1.equals(o2))
{
 System.out.println("Both integer objects are the same");
}

而不是我习惯的:

if (o1 == o2)
{
  System.out.println("Both integer objects are the same");
}

两者之间有什么区别。为什么他的方式(使用)更好?.equals

在快速搜索中发现了这个,但我无法真正理解这个答案:


答案 1

在Java中,总是只比较两个引用(对于非基元,也就是说) - 即它测试两个操作数是否引用同一个对象。==

但是,可以重写该方法 - 因此两个不同的对象仍然可以相等。equals

例如:

String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });

System.out.println(x == y); // false
System.out.println(x.equals(y)); // true

此外,值得注意的是,任何两个相等的字符串常量(主要是字符串文本,但也包括通过串联的字符串常量组合)最终将引用同一字符串。例如:

String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!

这里和是指向同一字符串的引用,因为 是一个等于 的编译时常量。xyy"hello"


答案 2

== 运算符比较对象是否为同一实例。equals() oerator 比较对象的状态(例如,如果所有属性都相等)。您甚至可以重写 equals() 方法,以便在一个对象等于另一个对象时定义自己。


推荐