“==” 与 equals

  这几天做过一些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;
}    

 

posted @ 2017-08-06 11:55  渊源谭  阅读(278)  评论(0编辑  收藏  举报