今日看到一篇文章,讲述“==”和equals的区别,接近上万字,十一页的word。仔细研究一番,最终得到自己的见解:
直接创建数据类型的比如int a=3 ;String b=“fuck”之类的数据存储在栈里,而new过的对象存储在堆里,在栈里的只是一个指向堆对象的一个指针,也叫地址;而==和equals的区别在于,==比较的是在栈里的值,equals比较的是对象里的内容。
public class test_equals {
public static void main(String args[]) {
String a1 = new String("1");
String a2 = new String("1");
String a3 = "2";
String a4 = "2";
if (a1 == a2) {
System.out.println("a1==a2成立");
} else {
System.out
.println("a1和a2都是new出来的新对象,其内容存储在堆中,此时用==比较的是栈中地址,明显不会相等");
}
if (a3 == a4) {
System.out.println("没经过new,即数据只是暂存在栈中,==是比较栈中数据,因此必必然相等");
} else {
System.out.println("a3==a4不成立");
}
}
}
结论:
1)==和equals都是判断是否相等,但是“==”判断的是栈中的值是否相等,而equals比较的时对象是否是一个(对象名、对象里的所有内容)。
2)equal只能比较对象类型,而==可以是比较基本类型或者对象类型,在比较基本数据类型时,是比较值是否相等,比较对象类型时,是比较地址值是否指向同一个对象。
3)在没有重写equals方法的类里,equals的作用和“==”一样,都是比较值地址。