java中equals和==的区别

==比较的是栈中的值,基本数据类型是变量值,引用数据类型是堆中内存对象的地址值

Java中所有的类都是继承与Object这个基类的,在Object类中定义了一个equals方法,这个方法的初始行为是比较对象的内存地址(功能与==相同),但在一些类库中已经重写了这个方法(一般都是用来比较对象的成员变量值是否相同),比如:String,Integer,Date 等类中,所以他们不再是比较类在堆中的地址了

我们经常在比较字符串的时候用equals,总想当然认为equals比较的是引用存储地址指向的实际值,其实并不是,因为String重写了equals方法。

对于引用数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是内存中的存放位置的地址值,跟双等号(==)的结果相同;如果被复写,按照复写的要求来。

 == 的作用:
  基本类型:比较的就是值是否相同
  引用类型:比较的就是地址值是否相同
equals 的作用:
  引用类型:默认情况下,比较的是地址值,重写该方法后比较对象的成员变量值是否相同

                        (如:String、Integer等)

有些时候看似不太符合我们的以上的总结,其实是这些类本身特殊的问题,而不是上述总结不对

如:

Integer a = 10;
Integer b = 10;
System.out.println(a==b);
System.out.println(a.equals(b));

结果:都是 true

明明是两个Integer对象 a和b  ,按以上总结==比较的是地址值,应该第一个输出是false啊,这里确实true,为什么?

其实Integer类型赋值在-128到127之间的数字地址值都是一样的,这是赋值的源代码

 这里的理解以及自动装箱拆箱可以看一下我的这个博客:

(1条消息) java 自动装箱、拆箱_m0_53611007的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值