读书人

String定义的有关问题

发布时间: 2012-01-19 00:22:28 作者: rapoo

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 "的引用!

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


String str= "abc ";
最多产生了一个对象 具体问题要具体分析:
String 是一个特殊的类
字符串池中的内容 叫字符面量 内容不能修改
String 用 双引号 赋值 将放入字符串池中 池中没有 就立即创建一个对象
有 就直接拿来用
所以 说 要分情况 但不会产生两个对象的

另外 引用 不产生对象
[解决办法]
一个对象,就是存储字符串 "abc "的变量.
[解决办法]
迷糊

[解决办法]
String str = "abc ";
要是栈中已经存在 "abc ",则一个对象也不产生
要是不存在 "abc ",产生一个对象

读书人网 >J2SE开发

热点推荐