Java为什么设计成`String`不能用`==`比较值?

RT,最好能和c++,golang,c#等对比下哈 相关问题: Java里把int基本类型变成Integer包装类,有啥用? - 知乎 https:/…
关注者
114
被浏览
148,151
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

按理说Integer之间都不能用==比较值的大小,因为Integer和String一样是Reference类型。

什么叫Reference类型?就是它指向的是一个地址,String啊Integer啊只是一个引用,一个指向。两个String对象地址当然不同,就不能直接比较值的大小。当然,如果两个String指向一个地址例如

String s = new String();
String b = s;

他俩指向一个地址,所以就是相等的。

同等地,如果你创建了个ArrayList,并且让另一个ArrayList也指向这一个地址

ArrayList a = new ArrayList();
ArrayList b = a;

则你对b的值进行修改,a的值也会相应的发生改变,因为他们都是指向同一个地址。看起来好像是复制了一份,实际上是创建了一个“软链接”。

但是int之间就可以比较值的大小,因为int是Java的Primary Type,它是直接存储数值的,所以用=比较的时候就是比较数值。