完全搞懂 java中的“==”和“equals()”方法

一、" == "

  • 对于基本类型来说,比较的是值
  • 对于引用类型来说,比较的是他们的引用

注:这里值得引用是什么呢,在创建引用类型的时候,会把引用存到栈中,而真正的值存储在堆中,而引用存储了值在堆中的地址

        String x = "abc";
        String y = "abc";
        String z = new String("abc");

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

因为常量“abc”是存储在常量池的,指向的是同一个引用,所以x==y是true,而z是new的对象,他们的引用是不相同的,所以x == z是错误的

二、"equals"

在对象的equals中,本质上就还是==

但是,有特例,比如,String和Integer就重写了equals方法,他们比较的是值

请看下面的例子:

        Artist artist = new Artist("资讯");
        Artist artist1 = new Artist("资讯");

        System.out.println(artist.equals(artist1));//false

结果为false,结果和我们预期是一样的,其实在没有重写equals方法的时候,equals方法和==相同,比较的是引用,下面是Object中equals的源码:

默认按照==比较

那请看下面这段代码:

        String s = new String("aaa");
        String ss = new String("aaa");
        System.out.println(s.equals(ss));//true

结果为true,那为什么呢,因为在设计String的时候,重写了equals方法,请看源码:

String最终比较的是值是否相同

总结一下:

"==" 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;

而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章