完全搞懂 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 等把它变成了值比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值