这几天做过一些java的面试题,其中涉及的“==” 与 equals之间的问题甚是烦恼,然后只好自己写代码测试,得到一些有用的结论,希望对大家有用
==对于基本数据类型,判断值是否相等;对于类类型,判断地址是否相同
运算符”==”与equals比较对象的区别是什么?
== :
基本类型:比较的是值
引用类型:比较的是地址值
equals :
基本类型:比较的是值本身
引用类型:在不重写的情况下比较的是地址值+@+哈希值
10 Test t = new Test(); 11 Test s = new Test(); 12 System.out.println(t == s);//false 比较地址 13 System.out.println(t.equals(s));//false 没有被重写的equals,比较地址 14 String c = new String(); 15 String d = new String(); 16 17 System.out.println(c == d);//false 比较地址 18 System.out.println(c.equals(d));//true String类的equals被重写,比较值 equals只重写了String对象的比较值,其他对象比较的是地址 String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); System.out.println(str1 == str2);//true 都指向方法区中常量池的值"abc" System.out.println(str2 == str3);//false str3在堆内存中存放"abc","abc"取自常量池
11、以下返回true的表达式有__ac_____。
A. "briup" == "briup"
B. "briup" = "briup"
C. "briup".equals(new String("briup"))
D. "briup" == new String("briup")
equals重写:(eclipse自带重写功能,以下不理解也可以)
public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Test other = (Test) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }