从equals()与==中理解java中对象与引用的概念

简单的例子


在c中我们经常这么写,这个时候我们可以很正常的判断并进入到花括号内;:

string a="1";
string b="1";
if(a=="1"){...}

但是在java中,如果同样的这么写,就可能得不到想要的结果:

String a=new String("1");
String b=new String("1");
if(a==b){...}

如果想要实现效果,不妨使用equals()进行代替:

if(a.equals(b)){...}

原因


概念

在java中我们可以将一切都视作是“对象”。但是,实际上我们所操作的并不是”对象“本身,而是这个对象的”引用“。
比如当创建一个新对象的时候 String a=new String("1");的时候,实际上做了两件事:一是创建了一个字符串对象(内容是”1”);二是创建了一个引用a使其与这个新的字符串对象相关联。
a在内存中所存储的并不是字符串的内容”1”,而是一个存储了”1”的内容的内存的地址,当我们使用a的时候,我们是通过a所存的地址找到这个地址里的内容”1”。

回到上面的问题

如果两个对象不是一个地址却是一个值的话,==比较的是2个引用所存的东西:各自对象的地址,所以可能就会产生意料之外的结果。

其他的解决方法

当然,直接因为String可以放进常量池中,我们也可以这么写:

String a="1";
String b="1";
if(a==b){...}

这个时候他们都将指向常量池中的”1”对象,那么存储的地址也就一样啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值