Java 中,String s=new String(“xyz”);创建了几个对象??
我觉得是创建了一个对象s,.....
------答案竟然是一个或两个
答案是B。参考http://zhidao.baidu.com/link?url=JDvUYN4zCgPD7dl06_Wa7zMBGroIhSCUS-HSIWHWw5i7txQHfUXMDIM_4owccDiE2KgUQye4wt78_kACupQBtq,讲的很清楚了
就是一个对象啊,
新建一个字符串常量xyz,让s指向这个引用
new了一个,"xyz"本来又是一个
两个
共2,xyz是一个对象,在常量池中,new创建了一个对象,
创建了一个或两个,主要是分析内存中对象所在位置,这道题重点在于常量池中是否有“xyz”
创建了一个或两个,可以直接查看jdk源码更容易理解,new 肯定创建了一个对象,而xyz得看常量池是否包含
学习了!!
String s=new String("xyz")究竟对象个数分为两种情况:
1.如果String常理池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String("xyz");
2.如果String常理池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String("xyz")。
这里考的是jvm中字符串池中的概念,正确答案应该是 1个或者2个。
先说2个:
如果字符串池中不存在xyz的引用,那么就会在字符串池中创建xyz,但是new String(“xyz”); 不属于字符串引用的范围,在字符串池外又创建了一个对象,所以这里有两个。
再说1个:
如果字符串池中存在xyz的引用,那么就不会在字符串池中创建xyz,但是new String(“xyz”); 不属于字符串引用的范围,在字符串池外创建了一个对象,所以这里有一个。