黑马程序员技术交流社区
标题:
一道笔试题
[打印本页]
作者:
周星星
时间:
2012-6-19 09:06
标题:
一道笔试题
String s=new String("abc");问:该语句有几个String Object?
我写的是:有两个,一个是s,另一个是"abc"
不知道写的是否正确
作者:
山水游客
时间:
2012-6-19 09:18
首先说明String是不可变类。一次创建将不能再修改,由于String是非可变的,所以每次对string的改变都要重新建立String对象,为了string对象的可利用性和jvm运行的高效。如果是s="abc",将直接在strings pool中进行查找是否存在相等的String,如果存在则直接利用,就不在创建。如果不存在则直接在strings pool中创建对象。如果用new创建对象,则和其他对象的创建一样在heap中创建。
对于此问题来说,则创建了两个string,第一个“abc”创建一个String在strings pool中,第二个是new 出来的String,将和其他对象new出来的对象一样创建在堆中。 str则指向堆中的对象。
作者:
张立江
时间:
2012-6-19 09:20
正确.
s是引用,存放在栈内存中
abc是常量,存放在常量池
作者:
万宝东
时间:
2012-6-19 09:20
String s=new String("abc"); 只有这一句吗,问创建了几个对象?
如果只有这一句话问创建了几个对象,那么是2个 没错.
作者:
陆强强
时间:
2012-6-19 10:18
2个,一个是"abc",另一个是new string.
s只是指向了new string,而 new string又指向了"abc".
作者:
郑冬
时间:
2012-6-19 10:44
把创建一个String分成两步,就更容易理解些,如下:String s;s = new String("abc");
以上两步第一步创建了一个对象S(第一个Object),第二步给对象S赋值为“abc”(第二个Object)。
作者:
刘笑
时间:
2012-6-19 11:02
当new一个对象并赋值时候,假设赋值为abc,则JVM先从StringPool中查找有没有abc,如果没有,则创建一个。如果没有,则令s指向它。然后再到堆中创建一个对象。所以一共有两个对象。楼主切记:只要出现一个new,肯定在堆中创建一个对象
作者:
黑马刘洋
时间:
2012-6-19 11:15
String s是在栈中建立一个引用。
new String("abc");是在堆里建立一个String对象"abc"
然后通过赋值符号=,把对象的地址赋给引用。
有俩Object,栈中有个基础型String,堆里有个对象String
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2