1.String a="ab",String b="ab",a==b
结果:true
String储存在常量池,创建时先查看常量池,如果有则返回引用,没有则创建新的,所以相等。
2.String a="ab",String b="a"+"b",a==b
结果:true
编译时会省略+号,相当于String b="ab"
3.String a="ab",String b=new String("ab"),a==b
结果:false
通过new String创建,首先在常量池查看是否存在,不存在就创建,然后在堆内创建对象,拷贝常量池中的对象.
4.String a="ab",String b="a",String c=b+"b",a==c
结果:false
字符串与String对象通过"+"号连接实际上是通过StringBuilder或StringBuffer实现的.首先创建StringBuilder创建对象,然后通过append连接,最后toString返回
5.String a="ab",String b=new String("ab"),a==b.intern()
结果:true
intern()方法首先在常量池寻找是否存在该字符串,如果存在直接返回,否则创建返回
本文深入探讨了Java中String对象的内存管理机制,包括常量池存储、字符串拼接、new关键字创建对象以及intern()方法的使用。通过具体示例,详细分析了不同情况下String对象的内存分配和引用情况。

433

被折叠的 条评论
为什么被折叠?



