java基础之“==“ 与 ”equals ”的区别
前言:
作为Java的基础知识,我相信可能还有许多朋友对于 "==" 与 "equals " 之间的关系还不是很明白,今天就总结一下两者的区别:
知识点一:“==”与 equals 比较的内容是什么?
1. " == " 比较的是两个对象的内存地址
2. "equals"方法:
a.Object类中的equals方法内部实现依然是使用 "==",也就是说比较的是内存地址
b.java中除了Object类之外的所有类都直接或者间接继承Object类,也就是说,每一个类都能够重写Object类的equals方法,
那么这个时候,比较的是什么就有你自己而定了。比如String类重写equals方法,比较的是内存地址和字面值;
知识点二:这里附上 Object类的equals方法和String类复写equals方法的源码
Object中的equals方法源码: —jdk1.7
public boolean equals(Object obj) {
return (this == obj); //内存地址相同返回true
}
String类中重写equals方法源码: —jdk1.7
public boolean equals(Object anObject) {
if (this == anObject) {
return true;//先比较内存地址相同返回true
}
if (anObject instanceof String) {//内存地址不同,比较字面值
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {//比较两个字符串的长度是否相同
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {//循环比较每个值是否相同(这里是倒序比较)
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
知识点三:“ == ”案例(以String字符串位例)
public class Test3 {
public static void main(String[] args) {
String str1 = "中国";
String str2 = "中国";
String str3 = new String("中国");
String str4 = str3.intern();
System.out.println(str1 == str2);// true
System.out.println(str1 == str3);//false
System.out.println(str1 == str4);//true
System.out.println();
}
}
知识点四:案例解释
知识点五:“equals”案例 ,以String字符串为例
String a1 = "123456";
String a2 = new String("123456");
String a3 = "123456";
String a4 = a2.intern();
System.out.println("a1 equals a2 : "+(a1.equals(a2) ));//a1 equals a2 : true
System.out.println("a1 equals a3 :"+(a1.equals(a3)));//a1 equals a3 :true
System.out.println("a1 equals a4 :"+(a1.equals(a4) ));//a1 equals a4 :true
总结:
1.从结果上来看都是true,可以得到String类重写的equals方法生效,确实是比较了字符串的字面值