请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于常量池的问题

老师,我想问如果 String s1=“ab”+new String(“cd”);
这句话会有数据被放入常量池吗,还是说这句话等于新建了一个String对象,存储的值为abcd?
另外如果是Integer num=1000, 这个1000会被放入常量池吗?我看有的教程说-127到128是事先放入常量池的。

正在回答 回答被采纳积分+3

1回答

ccmouse 2020-08-19 15:49:45

String s1=“ab”+new String(“cd”), 这句话只有"ab", "cd"会被放入常量池,"abcd"并没有。所以的确新建了一个对象,其值为"abcd"。(当然中间还创建了new String("cd")),以及放入常量池的"ab"和"cd")

整数的话,的确是你所说的,不过范围是-128到127。这里面的整数对象是预先放入一个叫“整数缓存”IntererCache的地方。1000不会。

可以写一段程序证明:

String s1 = "abcd";
String s2 = "abcd";
System.out.printf("s1 == s2: %b\n", s1 == s2); // true
String s3 = "ab" + new String("cd");
System.out.printf("s1 == s3: %b\n", s1 == s3); // false
Integer n1 = 100;
Integer n2 = 100;
System.out.printf("n1 == n2: %b\n", n1 == n2); // true
Integer n3 = 1000;
Integer n4 = 1000;
System.out.printf("n3 == n4: %b\n", n3 == n4); // false


0 回复 有任何疑惑可以回复我~
  • 提问者 慕前端7365659 #1
    为什么abcd没有被放入常量池?
    回复 有任何疑惑可以回复我~ 2020-08-20 13:15:35
  • ccmouse 回复 提问者 慕前端7365659 #2
    只有在代码里写"abcd",才会把"abcd"放入常量池。如果只是这样一句:String s1=“ab”+new String(“cd”),“abcd"不会。(不过后面的例子因为有String s1="abcd"出现,所以是会的)
    
    如果需要把运算结果也放入常量池,可以用intern函数:
    String s1=(“ab”+new String(“cd”)).intern();
    回复 有任何疑惑可以回复我~ 2020-08-20 15:47:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信