关于equals和==的总结

来源:互联网 发布:淘宝铝合金箱子 编辑:程序博客网 时间:2024/05/16 17:38

在计算机语言中,==才代表传统意义上的相等,=确是一种赋值的语句,经常使用==来进行判断前后两者是否是相等,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]的实例缓存了下来。这样就解释了上面的问号!!!!




原创粉丝点击