社区
Java SE
帖子详情
String a=new String("foo");一共产生了几个对象?为什么??谢谢!
programeyonger
2005-07-11 01:46:42
如题!!
...全文
982
28
打赏
收藏
String a=new String("foo");一共产生了几个对象?为什么??谢谢!
如题!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
String
s =
new
String
("xyz");创建了
几个
String
Object?
转载:http://rednaxelafx.iteye.com/blog/774673 问题: Java代码
String
s =
new
String
("xyz"); 创建了
几个
String
Object? 这个问题自身就没有合理的答案,楼主所引用的“标准答案”自然也就不准确了: 引用 答案:两个(一个是“xyz”,一个是指向“
请别再拿“
String
s =
new
String
("xyz");创建了多少个
String
实例”来面试了吧
引用 问题: Java代码
String
s =
new
String
("xyz"); 创建了
几个
String
Object? 这个问题自身就没有合理的答案,引用的“标准答案”自然也就不准确了: 引用 答案:两个(一个是“xyz”,一个是指向“xyz”的引用
对象
s) (好吧这个答案的吐槽点很多……大家慢慢来) 这问题的毛病
主题:请别再拿“
String
s =
new
String
("xyz");创建了多少个
String
实例”来面试了吧 ...
本来因为见得太多已经吐槽无力,但这次实在忍不住了就又爆发了一把。写得太长干脆单独开了一帖。 顺带广告:对JVM感兴趣的同学们同志们请多多支持高级语言虚拟机圈子 以下是回复内容。文中的“楼主”是针对原问题帖而言。 =============================================================== 楼主是看各种宝典了么……以...
==与equal的区别
总结 1、= =操作符比较的是操作符两端的操作数是否是同一个
对象
;另外= =操作符两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。 2、
String
的equals()方法比较的是两个
String
对象
的内容是否一样 3、= =比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为TRUE,如: int a=10 与 long b=10L 与 double c=10.0都是相同的
String
s =
new
String
("xyz")创建了多少个
String
实例 真相大揭幕
看的一个帖子,真特么底层,现在拿过来瞻仰一下:源地址:http://www.iteye.com/topic/774673 楼主要注意了:这题或类似的题虽然经常见,但使用这个描述方式实际上没有任何意义: 问题:
String
s =
new
String
("xyz"); 创建了
几个
String
Object?(2个不准确) 这个问题自身就没有合理的答案,楼主所引用的“标
Java SE
62,614
社区成员
307,319
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章