String a=new String("foo");一共产生了几个对象?为什么??谢谢!

programeyonger 2005-07-11 01:46:42
如题!!
...全文
982 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
hawaii_wx 2005-07-13
  • 打赏
  • 举报
回复
挖个坑,做个记号
wjhwlq 2005-07-12
  • 打赏
  • 举报
回复
确实是一个或两个。
HaiSenLing 2005-07-12
  • 打赏
  • 举报
回复
两个对象,一个是“foo”,一个是指向“foo”的引用对象s。
arfeng75 2005-07-12
  • 打赏
  • 举报
回复
一个对象A指向内存的FOO
nethz 2005-07-12
  • 打赏
  • 举报
回复
String * a=new String("foo");
chuanyuan88 2005-07-12
  • 打赏
  • 举报
回复
学习,java确实有一个String Pool的东西,写了一个段代码:
public class StringLence {

public static void main(String[] args) {

String s = "abc"; //放在String pool里,产生了一个对象
String n = s;
s = "abc"; //关键在这里,它并没有产生新的对象,而是指向原来的
System.out.println(s == n); //返回结果是true,证明。

}
}
Dan1980 2005-07-12
  • 打赏
  • 举报
回复
楼上此言差矣, 这是JAVA大师的经验之谈.
编程思想固然重要, 但是对底层实现一无所知, 肯定写不出好的程序.
wly033 2005-07-12
  • 打赏
  • 举报
回复
这种问题没有意义,是考学生的。
重要的是编程思想与编号经验。
Dan1980 2005-07-12
  • 打赏
  • 举报
回复 2
String a = new String("foo");

第一次执行时创建了二个, 一个为字面量"foo"(它本身是一个String对象), 一个为new String("foo")(它是通过new创建的, 功能上和字面量"foo"完全一样, 但却是另一个对象).

第二次执行时, 只创建一个, 即new String("foo"), 这是因为: "foo"作为String字面量, 是存在于String Pool里面的, 第二次使用它时, 直接指向原有的String, 而不再创建新的String; 但new String("foo")却每执行一次都创建一个新的,完全一样的String对象.

因此, 结论是: 永远不要使用 String a = new String("foo");这种方式来创建字符串, 而要用String a = "foo";这种方式. 这一点在<Effetive JAVA>第四条中说得很清楚了.
shanshuiboy 2005-07-12
  • 打赏
  • 举报
回复
我靠,越看越迷糊,本来以为是1个的,看了之后更不明白了.


到底是1个或是两个啊?难道没有一个基础好的比较权威的高手?
renco 2005-07-11
  • 打赏
  • 举报
回复
2个撒~
yonghar 2005-07-11
  • 打赏
  • 举报
回复
确实是一个或两个。(一开始俺也想当然两个了-_!!!)

当常量池中已经存在"foo"了,就不会重新创建了。
而new String(***)肯定是新的对象了。
mofeir 2005-07-11
  • 打赏
  • 举报
回复
答案是1个或者两个。哈哈
猪猪们好

我是那个考官
nwpulipeng 2005-07-11
  • 打赏
  • 举报
回复
晕啊……显然是两个了
programeyonger 2005-07-11
  • 打赏
  • 举报
回复
两个,我知道了。
hdkdly 2005-07-11
  • 打赏
  • 举报
回复
哎,又是这个问题。基础没有牢固
2个啊,一个是new的,一个是对foo的引用
Dan1980 2005-07-11
  • 打赏
  • 举报
回复
无语中。。。。

没人看我引用的那个贴子么???

这个问题说得我自己耳朵都起茧了,竟然还有人认为是一个!

二个, 分别是:

字面量"foo"
new String("foo")

持不同意见的人, 请看我引用的那个贴子, 或者直接去看<Effetive JAVA>中的第四条“Avoid Creating Duplicate Objects”。
njwangchuan 2005-07-11
  • 打赏
  • 举报
回复
只有一个对象,String a只是申明了一个变量,还没有为a分配空间.=new String("foo")则在内存空间内分配一块"foo",a指向这个空间,同时为变量保留副本
chq32 2005-07-11
  • 打赏
  • 举报
回复
说两个的人,还不少啊,倒是说说哪两个?
tanjingbool 2005-07-11
  • 打赏
  • 举报
回复
2个
加载更多回复(8)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧