对于创建了几个对象得看上文! 当这一行代码不能判断产生了几个对象 如果上文的对象已经在字符串连接池中创建一个"xyz"的对象, 那么这行代码就只创建一个对象存储在堆中指向字符串连接池中已经存在的那个"xyz"对象,在栈中存储堆中对象的引用不属于对象。如果字符串连接池中不存在"xyz"的对象,那么就会在字符串连接池中创建一个"xyz"的对象,并在堆中创建一个对象指向字符串连接池中的那个"xyz"对象,在栈中同样也是存储堆中对象的引用不属于对象。【当定义String s = "xyz"或者定义String s = new String("xyz");时如果字符串连接池中不存在"xyz"对象,则都会在字符串连接池中创建"xyz"对象】希望楼主从根本上去理解问题! 这样以后遇到这样的问题就都可以解决掉了
在内存中申请了一块内存单元,指针为S,内容为“xyz”
但如果将问题改成:String s=new String("XYZ")请问创建几个堆栈?
那么答案就是2个
NET715 两个,一个是存储在堆上的XYZ,一个是存储在栈上的S变量,S存储的是XYZ在堆上的首地址我也比较赞同这种说法。 但是问什么还说2个? s是个变量啊WPGDHC 3个 你更强! 说下问什么?
syeerzy 你这个是正解吧! (要你再额外做一些事情它才算个对象) 就是做对象和变量区别的事情?try503 怎么是=null的是?
因为即使是独立的一行写"XYZ"; 编译器也不会报错,在执行的时候,系统也会非配内存,但是因为它没有引用,很快就会被gu回收掉。但无论怎么说,它都已经是一个存在过的字符串了。
如果上文的对象已经在字符串连接池中创建一个"xyz"的对象,
那么这行代码就只创建一个对象存储在堆中指向字符串连接池中已经存在的那个"xyz"对象,在栈中存储堆中对象的引用不属于对象。如果字符串连接池中不存在"xyz"的对象,那么就会在字符串连接池中创建一个"xyz"的对象,并在堆中创建一个对象指向字符串连接池中的那个"xyz"对象,在栈中同样也是存储堆中对象的引用不属于对象。【当定义String s = "xyz"或者定义String s = new String("xyz");时如果字符串连接池中不存在"xyz"对象,则都会在字符串连接池中创建"xyz"对象】希望楼主从根本上去理解问题! 这样以后遇到这样的问题就都可以解决掉了