java中==和equals的区别_Java中==和equals的区别

介绍

首先==和equals可以比较基础数据类型,比如int a =1,也可以比较引用数据类型,比如Object a = new Object(),

那我们就分别看一下在比较基础数据类型和引用数据类型时有什么区别.

分析

这是一道常见的面试题,要明白==和equals的区别,先看一下源码,equals是Object类的方法,看一下Object类的源码.

public booleanequals(Object obj) {return (this ==obj);

}

可以看到在Object类中也是调用==方法,由于所有的类都继承自Object类,只要不重写equals方法,equals和==是一样的,因此可以得到结论1:

对于所有没有重写equals方法的类,equals方法和==是一样的,没有任何区别,无论是比较引用类型还是基础数据类型.

那么对于重写了equals方法的类呢,String,Integer类都重写了,我们以String类为例子,来看一下String类的源码.

28aa1c99dc844e15059ffa135137c9b7.png

可以看到String类把传进来的String对象和自己转换成字符数组,然后再依次比较两者是否相等,也就是说比较两者的内容是否相等,而不是去比较地址.

Integer类同理,也是比较值是否相等,而不是去比较地址了.

我们测试一下:

public classTest3 {public static voidmain(String[] args) {

String s1= "abc";

String s2= new String("abc");

System.out.println(s1==s2);

System.out.println(s1.equals(s2));

}

}

5e5d534875b6fb2e99e392b69d401da7.png

对于s1和s2两者内容相同,但是地址不一样,因此==输出为flase,equals输出为true.因此String的equals是比较字符串内容是否一样.

总结:

1.对于基础数据类型:equals和==是一样的,比较的就是基本类型的值

2.对于引用类型:如果没有重写equals方法,equals和==是一样的,比较的是引用类型指向的地址是否一致.

如果重写了equals方法,那么equals是比较内容是否一致,==比较地址是否一致.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值