关于equals和==的总结

本文探讨了Java中==与equals的区别,通过示例详细解释了二者在不同情况下的行为,包括String和Integer类型的比较,并总结了常量池、对象引用及自动装箱缓存的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在计算机语言中,==才代表传统意义上的相等,=确是一种赋值的语句,经常使用==来进行判断前后两者是否是相等,equals两者的区别也是一种常见的话题。

废话不闲聊,之间上代码:


                String str1 = "123";
String str2 = "123";
System.out.println(str1==str2);                               //true      常量池里面的所以地址也是一样的
System.out.println(str1.equals(str2));                     //true

String str3 = new String("132");
String str4 = new String("132");
System.out.println(str3==str4);                             //false......比较的是地址
System.out.println(str3.equals(str4));                    //true

String str5 = "66";
String str6 = new String("66");
System.out.println(str5==str6);                             //false
str6 = str6.intern();//intern()函数将字符串的内容放到常量池中
                System.out.println(str5==str6);                             //true

----------------------------------------------------分割线---------------------------------------------------------------
Integer i1 = new Integer(123);
Integer i2 = new Integer(123);
System.out.println(i1==i2);   //false  比较的是地址
System.out.println(i1.equals(i2));  //true 

-----------------------------------------------------分割线--------------------------------------------------------------
       //为什么这个就是true??????
Integer i3 = 100;
Integer i4 = 100;
System.out.println(i3==i4);//true
System.out.println(i3.equals(i4));//true
      //为什么下面这个就true?????
Integer i5 = 129;
Integer i6 = 129;
System.out.println(i5==i6);//   false  存储于
System.out.println(i5.equals(i6));//  true

------------------------------------------------------------------------------------------------------------------------

总结下:

1、自认为== 与equals并没有关系,==比较的是两个被比较的地址,而equals的比较对象具体还得看调用者的实现方法。

2、对于String类型的一点总结,String如果直接赋值,就会将变量的值存放在常量池中,在常量池中存在的如果下次,还有相同的

field,就会指向这个”常量值“,所以==返回true

3、new 对象是从新在一个堆内存开辟空间,所以对于两个虽然,传递参数是一样的实例而言,存放的地址还是不一样的,== 检验的是地址,所以返回的自然就是false

4、对于Integer如果是new一个对象的话,地址是不同的自然就不用说了,原理和String一样

5、对于常量的赋值,如果赋值的范围在-128~127之间,那么就会返回 true,之外返回false。对于这种原因是因为Integer类内部对value值为-128到127范围[-128,127]的实例缓存了下来。这样就解释了上面的问号!!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值