Topic: 请教:String a=new String("abc");产生了几个对象呢?

  Print this page

1.请教:String a=new String("abc");产生了几个对象呢? Copy to clipboard
Posted by: drxjava
Posted on: 2004-11-19 10:38

String a=new String("abc");产生了几个对象呢?
有人说是一个有人说是两个,到底是产生了几个呢?
他和String a="abc";有什么区别呢?
我认为是产生了一个对象。
请高手给我解释一下呀!谢谢了呀!:)

2.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: haibo
Posted on: 2004-11-19 10:42

<<Tinking in java >>3rd 第二章好好看看吧

3.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: drxjava
Posted on: 2004-11-19 15:36

我没有那本书呀,能不能在这里给我解释一下呀?谢谢了呀!好不好呀?

4.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: chengbd
Posted on: 2004-11-19 18:01

我想只是一个String对象,就是“abc",而a只是一个指向这个对象的”引用变量“,不是对象。这样理解对吗?

5.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: littledeer1974
Posted on: 2004-11-19 20:35

恩,楼上我觉得是对的
"abc"--->Object
a---->refrence

而且,haibo的简易也很好(我看了Smile写的很清楚)

6.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: drxjava
Posted on: 2004-11-20 09:42

可是这个String对象有好多的高手都说他产生了两个还有说产生了三个对象的
就是在:String a=new("abc");这条语句中。
String对象是和一般的对象不同的特殊对象吧!
要是有那位高手知道的话,请帮忙解释一下呀!
谢谢!:)

7.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: drxjava
Posted on: 2004-11-20 18:57

没人帮帮我呀?55555555555555555555

8.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: wuyongjin
Posted on: 2004-11-21 15:50

我认为好象是两个:"abc",a(个人见解)

9.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: wuyongjin] Copy to clipboard
Posted by: ringayumi
Posted on: 2004-11-22 00:40

Two , a variable and "abc" literal!

The a variable reference to a String object.
The "abc" is a string literal , It was created by JVM!

So , It has generated two object!^_^

10.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: jameszhang
Posted on: 2004-11-22 08:55

http://www.cjsdn.net/post/view?bid=1&id=80139&tpg=1&ppg=1&sty=1&age=0#80139

11.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: riceboy0309
Posted on: 2004-11-26 16:31

只有一个对象,“ABC"是S的一个实例。详见JAVA 编程篇!!!!!

12.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: 四脚虫
Posted on: 2004-11-28 00:07

String a = new ("abc");这样的表达能通过编译吗?
应该是String a = new String ("abc"); <1>
或者String a = new String ();这样吧 <2>
其中<1>表示创建一个String对象,并且以a作为reference来操纵这个对象,并且初始化值为abc(相当于给String这个系统自带的类的构造函数传递了abc的值来初始化String的成员变量)
<2>同理,只不过初始化为默认值null.

13.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: 飞哥
Posted on: 2004-12-11 11:55

认为产生两个对象是因为在使用new声明字符串对象的时候,会为该对象重新建立一块内存空间用于存储对象,在这里为a开辟了一块内存空间,而字符串"abc"实际上也在内存当中获得了另外一块内存空间,那就是在所谓的字符串池当中,所以实际上是声明了两个对象。还有种情况
String a = "abc";
String b = "abc";
这里实际上a和b所指向的是同一个对象,也就是字符串池当中所存储的“abc”。不知道这样的解释是否合理。请大家指正。

14.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: wuyongjin
Posted on: 2004-12-11 16:45

一个,好好看看书吧
我刚看过了

15.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: ljs2k4
Posted on: 2004-12-11 17:14

所有字符串常量都被自动intern到string pool中。不信,try this:
String a =null;
String b = new String (a="abc");
System.out.println(a=="abc"); //输出true

所以答案是String a=new String("abc");这条语句生成了两个对象,a在heap中,"abc"在string pool中。
System.out.println("a"==new String("a")); //输出false
System.out.println("a".equals(new String("a")));//输出true

16.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: chengbd
Posted on: 2004-12-11 23:12

什么叫“字符串池”(string pool)?

17.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: wuyongjin] Copy to clipboard
Posted by: 飞哥
Posted on: 2004-12-12 11:28

wuyongjin wrote:
一个,好好看看书吧
我刚看过了


不知道你看的是什么书,不过不要把书上说的当圣经,用new生成string对象除了本身为其分配一个空间,还会在字符串池当中存储该字符串,所以被认为是两个对象,所谓的字符串池就是一个存储字符串字面量的空间,一般使用=号声明对象时,会在该字符串池当中查找是否存在该字符串,如果存在则把对象句柄指向该空间,如果不存在则在该字符串池当中存储该字符串,在字符串池当中是不允许有重复的字符串被存储的。

18.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: 飞哥
Posted on: 2004-12-12 11:32

在这里补充一下,所以一直以来争论一个或者两个我觉得没有必要,因为具体是一个还是两个还要看实际情况,例如:String a = new("abc);的时候,如果字符串池当中已经存储有该字符串常量,那么实际上只创建一个对象,相反,如果字符串池当中并没有存在该字符串常量,那么就是创建了两个对象。所以一个还是两个要看具体情况,没什么好争议的。

19.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: 飞哥] Copy to clipboard
Posted by: colo007
Posted on: 2004-12-12 22:28

飞哥 wrote:
在这里补充一下,所以一直以来争论一个或者两个我觉得没有必要,因为具体是一个还是两个还要看实际情况,例如:String a = new("abc);的时候,如果字符串池当中已经存储有该字符串常量,那么实际上只创建一个对象,相反,如果字符串池当中并没有存在该字符串常量,那么就是创建了两个对象。所以一个还是两个要看具体情况,没什么好争议的。

看来已经成为定论了,哈哈!

20.Re:请教:String a=new String("abc");产生了几个对象呢? [Re: drxjava] Copy to clipboard
Posted by: 理想の朽朽木
Posted on: 2004-12-14 21:35

2


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923