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

来源:互联网 发布:域名出售平台哪个好 编辑:程序博客网 时间:2024/05/16 17:31

简单的例子


在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”对象,那么存储的地址也就一样啦!

0 0
原创粉丝点击