java中 == 与 equals()区别

提起 == 与 equals()区别,首先的反应是:== 比较的对象的地址,equals()比较的值,如下:

String str1=new String("123");
String str11=str1;
System.out.println(str1==str11);  //true

String str2=new String("123");
System.out.println(str1.equals(str2));  //true

System.out.println(str1==str2);  //false

初次面试时被问到这样的问题,感觉太简单了,后面还偶有面试官会问到,难道还有什么其他的区别?查资料,果然查缺可补漏,如下:

//1.常量之间, ==的使用:

int a1=10;
int a2=10;
System.out.println(a1==a2);  //true

String s1="abc";
String s2="abc";
System.out.println(s1==s2); //true

常量值是放在直接内存的常量池中,以HashSet策略存储起来,多个相同的常量值在池中只会存一份地址;

基本数据类型和String常量可以直接通过==比较; 

//2.equals(),先来看一下方法的实现:

可以看到,equal方法首先是通过 == 比较的,如果地址相等返回true,否则比较对象中的每个字符的内容是否相等;

我们也可以完全重写equals(),按照自己设定的规则进行对象的比较;

3.总结:

==,比较对象地址、基本数据类型、String常量;

equals(),先比较地址,不相等再比较对象中每个字符是否相等,也可以重写设定比较规则;

参考查询资料地址:https://blog.csdn.net/lcsy000/article/details/82782864

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值