为什么我声明: String s1 = "xxx"; String s2 = new String("xxx"); String s3 = "xxx";
System.out.print("" + (s1 == s2)); System.out.print("" + (s1 == s3)); 上面的显示false 下面的显示true 感觉一样啊。
这和Java设计字符串的时候的设计有关,Java虚拟机为了提高效率并节约内存,对具有相同字符序列的字符串直接量使用同一个实例,这样的实例称为interned字符串。 所以对于Java来说,s1 s3 指定的是同一个interned字符串,而后者则是新建的对象。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。