关于常量池的问题
来源:6-5 Java数据类型、拆箱和装箱

慕前端7365659
2020-08-08
老师,我想问如果 String s1=“ab”+new String(“cd”);
这句话会有数据被放入常量池吗,还是说这句话等于新建了一个String对象,存储的值为abcd?
另外如果是Integer num=1000, 这个1000会被放入常量池吗?我看有的教程说-127到128是事先放入常量池的。
1回答
-
ccmouse
2020-08-19
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); // false022020-08-20
相似问题