日期:2014-05-20  浏览次数:20750 次

String定义的问题
请问,String   str   =   "abc ";
这个语句声明了几个对象?据说是两个(一个是引用,一个是内容为 "abc "的字符串)

请高手解释一下

------解决方案--------------------
1个对象 ,就是abc,引用不能叫对象,引用是引用,对象就是对象。
------解决方案--------------------
是两个,就是你说的
------解决方案--------------------
只有一个对象就是abc这个字符串在内存中的实体,str只是这个字符传的引用,通过引用改变对象的内容或者改变这个实体,就好比你是一个人,而名字只是为方便叫你而取的一样,名字不等于对象。这个解释够清楚否?

------解决方案--------------------
只有abc在字符串常量池中.
String a=new String( "abc ");//产生两个对像,一个在字符串常量池中,一个是在常规内存中
------解决方案--------------------
String str = "abc ";

str是object variable
"abc "是object
object variable里存的是reference,所以也就把它叫做reference.

翻译过来的说法就有点乱了..
------解决方案--------------------
gongyali2005(JAVA 民工)
请问字符串常量池在哪?
说详细点吧 这说法头一次听说...


String s1 = "abc ";
String s2 = new String ( "abc ");

这两个并不相等,
第一个声明了一个对象,就在常量池中。

第二个我觉得也是声明了一个,只是在内存中的“abc”

看看下面这个程序
public class Test {
public static void main (String args[]) {
String s1 = "abc ";
String s2 = new String ( "abc ");
String s3 = "abc ";
String s4 = new String ( "abc ");

System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s2==s4);

}
}

结果是

false
true
false

s1 和 s3 的引用都是指向常量池中的abc
s2 和 s4 分别指向不同的内存池,相互独立。

所以 常规上,String s1= "abc " 比String s1= new String ( "abc ");效率要高,虽然。。。后者看起来更符合对象的声明办法。

------解决方案--------------------
String s1= "abc " 这是一个对象
String s1=new String( "abc ") 这是两个对象

------解决方案--------------------
你理解不了 是因为你不懂JVM的堆栈机制
不要局限于这种初级的问题
等你再学段时间 自然而然就懂了
------解决方案--------------------
String str1 = new String( "abc ");语句,这里 "abc "本身就是字符串常量池(也就是栈,如果之前栈中有“abc”,则不创建abc了,如果没有,就在栈中创建一个“abc”)中的一个对象,而在运行时执行new String()时,将字符串常量池中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给str1持有,结论2个对象。
------解决方案--------------------
两个
------解决方案--------------------
two
------解决方案--------------------
一个对象也没有
它只是声明了一个引用字符串 "abc "的变量str
------解决方案--------------------
......
一个也没有。
------解决方案--------------------
当然是两个对象了.
------解决方案--------------------
是2个对象没错~!
涉及到内存分析.
String str = "abc ";

str 是分配在栈内存的,而 "abc "是分配在数据区 !
str是指向 "abc "的引用!

这么说不知道对不对? 也是新人....
------解决方案--------------------
还是不明白什么叫字符串常量池,哪位高手能说明一下啊!
------解决方案--------------------