Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象)

  Java中equals() 在使用必须与类挂上钩,不能单独使用。有的人这样理解"==比较的是对象,而equals()方法比较的是内容(即对象里面的属性)"。

  其实,Java中的equals作为一个方法,我们不能脱离了类来单独讨论它:

  equals()方法是来自于Object类的,源码如下:

 public boolean equals(Object obj)
{
return this == obj;
}  

  Object类中的equals方法与==功能是一模一样的:比较两个对象是否是同一个对象。

  只是,作为Object子类的String类为了符合自身的特质,重写了Object类的equals方法,重写后的效果是:如果两个String对象的值相同,那么调用equals方法返回true,否则返回false。

  看如下演示代码:

 public class Test{

      public static void main(String[] args){
String str1 = "hello";
String str2 = new String("hello");
String str3 = new String("hello");
String str4 = str3;//与str3是同一个对象 System.out.println(str1 == str2);//false,不是同一个对象
System.out.println(str2 == str3);//false,不是同一个对象
System.out.println(str3 == str4);//true,是同一个对象
System.out.println(str1.equals(str2));//true,值(属性)相同
System.out.println(str2.equals(str3));//true,值(属性)相同 A a1 = new A();
A a2 = new A();
System.out.println(a1 == a2);//false,不是同一个对象
System.out.println(a1.equals(a2));//false 因为没有重写equals()方法,所以直接调用Object的equals方法(等同于==),所以错误(因为不是同一对象)
}
} class A{}

  Java中,所有基本数据类型的实现类都按照String类的方式重写了equals方法,这些类都符合”==比较对象,equals比较值“这一结论。

  如果一个类是你自己定义的,那么如果你不重写equals方法,它还是默认比较对象。(直接调用Object类中的方法)

  参考链接:http://jingyan.baidu.com/article/f96699bbc9d6ae894e3c1b81.html

05-11 14:04