首页 > 分享 > == 与equals()的区别

== 与equals()的区别

weixin_34021089 于 2012-09-03 11:27:18 发布

今天逛论坛的时候发现了这个以前学习过的问题,但是以前没有花时间总结,只是记了一点普通的知识,现在就别实验边总结。

public static void main(String[] args) {               int a = 10;               int b = 10;               System.out.println(a == b);                              Integer c = new Integer(100);               Integer d = new Integer(100);               System.out.println(c == d);               System.out.println(c.equals(d));             } 

结果: true
false
true

==比较基本数据类型,如果两个值相同,则结果为true
对于c和d,这两个引用类型的变量,指向的是两个不同的对象(两个变量的地址不同,只是两个变量的值是相等的),因为对象不同,所以用==比较的时候是false

equals()方法用于比较对象的值

当程序执行,int b = 10的时候,首先会到缓冲池中寻找相同值的对象,因为缓冲池中已经a的值是10,所以b创建的时候,会引用a引用的对象10,所以a == b会输出true.

运行new操作符的时候,告诉程序“我只要新的,不要旧的”,所以一个新的对象就会被创建,虽然值相同,但是地址不同,就像一个叫阿三的人在海里游泳,一个叫阿三的人在岸边晒太阳,所以这两个人不是同一个人

API里的类大部分都重写了equals方法,没有重写的一般是自己写的类,
如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,
因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。

注意:比较数组的内容是否相等的时候,应该使用Arrays类中的equals()

public static void main(String[] args) {                                              char[] C1 = {'a','b','c'};                   char[] C2 = {'a','b','c'};                                      boolean isEqual;                                        isEqual = C1.equals(C2);                   System.out.println(isEqual);                                    isEqual = Arrays.equals(C1,C2);                   System.out.println(isEqual);              }  } 

运行结果:false true 

下面再来看一个例子:

public static void main(String[] args) {                                          char[] C1 = {'a','b','c'};                  char[] C2 = {'a','b','c'};                                                                     int[] C3 = {1,2,3,4,5};                  boolean[] C4 = {false,false,false};                                   System.out.println(C3);                 System.out.println(C4);                                   System.out.println(aryC1);                  System.out.println(aryC1+"____"+aryC2);               } 

运行结果[I@de6ced
[Z@c17164
abc
[C@1fb8ee3____[C@61de33 

String.valueOf、StringBuffer.append以及System.out.print中都对char[]数组单独处理,即进行了重载,使之可以输出内容(或者对内容操作处理),而不是地址。
但是字符串拼接操作没有对char[]数组单独处理,所以它处理的是数组char[]的地址。

转载于:https://blog.51cto.com/lovelydd/980488

相关知识

Scala中的==与equals
java 中equals和==的区别
Java 中的“==”和equals()方法比较总结。
栀子花与丁香花的区别
酢浆草与三叶草的区别 酢浆草与三叶草的区别地锦草
鸡腿菇与杏鲍菇的区别 鸡腿菇与杏鲍菇的区别是什么
蔷薇花与玫瑰花的区别
乔木与灌木的区别
茶花与山茶花的区别(山茶花与茶花有啥区别)
玫瑰花与月季花的区别

网址: == 与equals()的区别 https://m.huajiangbk.com/newsview1129997.html

所属分类:花卉
上一篇: NCO=NX的原因
下一篇: mysql :=和=的区别