侧边栏壁纸
博主头像
再见理想博主等级

只争朝夕,不负韶华

  • 累计撰写 112 篇文章
  • 累计创建 64 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

JVM-字符串池(String Pool)

再见理想
2022-05-25 / 0 评论 / 0 点赞 / 353 阅读 / 276 字

String x2 = new String("c") + new String("d");
String x1 = "cd";
x2.intern();
//问
问4: System.out.println(x1 == x2);

问题1:

分析:
String s3 = "a" + “b";
"a" 、“b"都是常量,在编译器已优化处理s3="ab", 放入字符串池。
而s4 = s1 + s2;
内部操作:new Stringbuilder().apend("a").apend("b").toString();
Stringbuilder的toString()方法返回String对象,存放在堆内存。
所以, s3 != s4

问题2:

分析:"ab"已存在在字符串池,s5指向字符串池中的地址。
所以 s3 == s5

问题3:

s4是指向堆内存的地址,
s4.intern():主动将串池还没有的字符串对象放入串池。
如果串池已有相同字符串,则并不会放入;
如果没有则放入,返回串池中的对象。
这里s3已将“ab"放入串池,s6不会再放相同字符串到串池,s6仍指向堆内存的地址。
所以,s3 != s6

问题4:

同问题3;
0

评论区