“==”和equals的区别

今日看到一篇文章,讲述“==”和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的作用和“==”一样,都是比较值地址。

恳求诸位试验试验,小弟只是一小小小菜鸟,才识浅薄,求各路大神指出错误之处!

猜你喜欢

转载自jaybril.iteye.com/blog/1669453
今日推荐