采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,我想问如果 String s1=“ab”+new String(“cd”); 这句话会有数据被放入常量池吗,还是说这句话等于新建了一个String对象,存储的值为abcd? 另外如果是Integer num=1000, 这个1000会被放入常量池吗?我看有的教程说-127到128是事先放入常量池的。
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); // trueString s3 = "ab" + new String("cd");System.out.printf("s1 == s3: %b\n", s1 == s3); // falseInteger n1 = 100;Integer n2 = 100;System.out.printf("n1 == n2: %b\n", n1 == n2); // trueInteger n3 = 1000;Integer n4 = 1000;System.out.printf("n3 == n4: %b\n", n3 == n4); // false
为什么abcd没有被放入常量池?
只有在代码里写"abcd",才会把"abcd"放入常量池。如果只是这样一句:String s1=“ab”+new String(“cd”),“abcd"不会。(不过后面的例子因为有String s1="abcd"出现,所以是会的) 如果需要把运算结果也放入常量池,可以用intern函数: String s1=(“ab”+new String(“cd”)).intern();
登录后可查看更多问答,登录/注册
为面试新手量身定制的Java面试尊享课,解锁“鲤鱼跃龙门”的妙招
1.2k 4
1.0k 9
1.1k 8
1.9k 7
1.3k 6