==与equals 的区别
简介
== 可以比较基本数据类型,也可以比较引用数据类型
比较基本数据类型,比较的是值
比较引用数据类型,比较的是地址值
equals 只能比较引用数据类型,比较的是引用数据类型的内容
说明
== 相当于实际生活中的等号(=),对于基本数据类型的变量来说,就是直接判断两个值是否相等
在java中的基本数据类型 四类八种
1、浮点型 :float(浮点型), double (双精度性)
2、整型 : byte(字节型), short (短整型), int(整型), long(长整型)
3、字符型 :char(字符型)
4、布尔型 : boolean(布尔型)
// 定义两个变量 int a = 20; int b = 20; // 使用== 进行比较两个值是否相等,打印结果 :true System.out.println(a==b);
对于这八种基本数据类型的变量,可以直接使用 == 来比较变量的值
而对于非基本数据类型的变量,在一些数据中称为 引用类型,比如String
对于引用类型存储变量,存储的并不是 “值” 本身,而是该值在内存中的地址。所以引用类型使用 == 进行比较的时候,比较的是变量值的地址值,并非 “值” 本身

1 public boolean equals(Object anObject) { 2 if (this == anObject) { 3 return true; 4 } 5 if (anObject instanceof String) { 6 String anotherString = (String) anObject; 7 int n = value.length; 8 if (n == anotherString.value.length) { 9 char v1[] = value; 10 char v2[] = anotherString.value; 11 int i = 0; 12 while (n-- != 0) { 13 if (v1[i] != v2[i]) 14 return false; 15 i++; 16 } 17 return true; 18 } 19 } 20 return false; 21 }
equals 方法是Object中的方法,因此对于所有继承Object 的类,都会有该方法。
从String 源码看出,String 重写了equals 方法,比较的是执行对象的内容
若没有对equals 方法进行重写,则比较的是引用类型变量所指向的对象的地址