- 在Java中,除了基本数据类型之外,其他数据类型均为对象。常见的String,数组均为对象。对象在赋值时,会传递地址,两个变量指向同一个地址。
String string1 = "hello";
String string2 = string1;
StdOut.println(string2.hashCode() == string1.hashCode());
string1 = "world";
StdOut.println(string1);
StdOut.println(string2);
- 一般情况下,string2既然拿到了string1的地址,那么string2和string1应该均为
world
。但是结果是
world
hello
- 原来
String
类比较特殊,来看看String
类是如何定义的
![String源码](https://i-blog.csdnimg.cn/blog_migrate/7dba8829fa5157c29bba672c3b167886.png)
String
类被定义为final
类型,当程序为string1
再次赋值为world
时,Java String池中并不存在该字符串,所以这时string1是新创建的对象,可以观察重新赋值后
string1,string2`的hashCode是否相等。- 结果为
false
,这就解释了为什么string1
和string2
的值不相等。