“==”和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的作用和“==”一样,都是比较值地址。

恳求诸位试验试验,小弟只是一小小小菜鸟,才识浅薄,求各路大神指出错误之处!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值