java中比较两个对象

JAVA中比较两个对象,其实就是判断两个对象的引用变量是否相等 

1. ==运算符就是比较引用变量所指向的内存地址是否相同 

2. equals(Object o)方法,也是按内存地址比较,但用户可以覆盖Object类的equals方法 

User u1=new User("Tom");

   User u2=new User("Tom");

   User u3=u1;

   u3.setName("Jack");

   System.out.println("u1==u3\t\t"+Boolean.toString(u1==u3));

   System.out.println("u1.equals(u3)\t"+Boolean.toString(u1.equals(u3)));

   System.out.println("u1==u2\t\t"+Boolean.toString(u1==u2));

   System.out.println("u1.equals(u2)\t"+Boolean.toString(u1.equals(u2)));

输出结果为:

u1==u3  true

u1.equals(u3) true

u1==u2  false

u1.equals(u2) false

 

 

3. Java中的一些类覆盖了equals方法,以事项按对象值进行比较,这些类包括,String,Date,Byte,Integer,Short,Character,Long,Float,Double,Boolean 

String s1=new String("hello");

String s2=new String("hello");

s1==s2//false,按地址进行比较

s1.equals(s2)//true, 已重写,按值进行比较

 

4. 重写equals的一个例子 

public boolean equals(Object o)

{

   //如果和自身比较,返回TRUE

   if(this==o) return true;

   //如果不是这个类的实例,返回FALSE

   if(!o instanceof User) return false;

   

   final User u=(User)o

   if(this.getName().equals(u.getName())

      return true;

   else

      return false;

}

重写了equals方法,那么上面的程序输出的结果是多少呢?

答案是

u1==u3  true

u1.equals(u3) true

u1==u2  false

u1.equals(u2) false

a、u1==u3  true 这个很好理解,u1 与 u3 指向同一块内存,u1 == u3比较的是内存地址,所以,一样大

b、u1.equals(u3)     true  ,在equals中,if(this==0) return true; 原理还是a

c、u1==u2  false    不多说了,大家再熟悉不过了

d、u1.equals(u2)     false,开始我以为相等的,其实我错了,因为u1 u3指向同一块内存,在u1.equals(u2)之前,有个u3.setName("Jack") 将name属性的值改为Jack,比较的时候就编程(“Jack”.equals("Tom"))其结果肯定是false了。

 

参考:

http://ssh-2009-126-com.iteye.com/blog/478008

你可能感兴趣的:(Java对象比较)