社区
Java SE
帖子详情
关于String s="a" + "b" 共创建了几个对象,自己的看法
jhr924
2008-12-19 10:42:25
看到论坛里有个 IBM面试的帖子:
String s = "a" + "b" + "c" + "d" + "e";
问此语句共创建了几个对象,据说是10个,请专家点评
刚开始也没弄明白,然后查了下 java编程思想,
现在认为:String 的内部结构是通过StringBuilder实现的! 所以没有生成ab abc 等对象
s引用在堆栈里,肯定不是对象
所以只创建了一个对象abcde
不知道对否
...全文
1177
56
打赏
收藏
关于String s="a" + "b" 共创建了几个对象,自己的看法
看到论坛里有个 IBM面试的帖子: String s = "a" + "b" + "c" + "d" + "e"; 问此语句共创建了几个对象,据说是10个,请专家点评 刚开始也没弄明白,然后查了下 java编程思想, 现在认为:String 的内部结构是通过StringBuilder实现的! 所以没有生成ab abc 等对象 s引用在堆栈里,肯定不是对象 所以只创建了一个对象abcde 不知道对否
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
56 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
PhoegonZhou
2008-12-24
打赏
举报
回复
感觉我还没学到,不过感觉快了。
GTJin
2008-12-23
打赏
举报
回复
[Quote=引用 1 楼 L502650 的回复:]
1个.
对
[/Quote]
同意
Friend_NO1
2008-12-23
打赏
举报
回复
only one
jhr924
2008-12-23
打赏
举报
回复
现在又明白了
呵呵
jhr924
2008-12-23
打赏
举报
回复
明白了 又糊涂了 又明白了 又糊涂了
bigbro001
2008-12-22
打赏
举报
回复
大家说法都不一样,到底听谁的啊???
Neves_pa
2008-12-22
打赏
举报
回复
看到很多高手....
云上飞翔
2008-12-22
打赏
举报
回复
答:忘记加toString()了.
第一个应为:
才相当于:String s=new StringBuilder(a).append("b").append("c").append("d").append("e").toString();
云上飞翔
2008-12-22
打赏
举报
回复
[Quote=引用 38 楼 jhr924 的回复:]
问下:是不是
String a="aaaaa";
String s = a + "b" + "c" + "d" + "e";
这样 才会用到StringBulder类的append,
[/Quote]
答:
是的.此时,String s = a + "b" + "c" + "d" + "e";
才相当于:String s=new StringBuilder(a).append("b").append("c").append("d").append("e");
另外:若写成:String s = "b" + "c" + "d" + "e"+a;
则相当于:String s=
new StringBuilder("bcde").append(a);
再另外:若a定义为:
final
String a="aaaaa";
此时,String s = a + "b" + "c" + "d" + "e";
则
相当于:String s="aaaaabcde";
bellower
2008-12-22
打赏
举报
回复
高手就是高手
终于确定了这道题的答案
huyu886
2008-12-22
打赏
举报
回复
显然只有一个
mzf333
2008-12-22
打赏
举报
回复
一个啊。。abcde
邵钏
2008-12-22
打赏
举报
回复
[Quote=引用 47 楼 ZangXT 的回复:]
引用 45 楼 enzymer 的回复:
引用 44 楼 ZangXT 的回复:
引用 43 楼 enzymer 的回复:
问个问题:字符串常量池里有对象吗?
如果没有的话,那么按照云上飞翔的解释,这道题的答案就是0个了
看jdk文档中对intern方法的说明就知道了.
谢谢ZangXT, 根据我对jdk里intern方法阅读后的理解,字符串常量池里的string是算做对象的。
那么~
haojia0716关于常量池中无对象的阐述有误
而我认同NewMoons的看法:
"答…
[/Quote]
嗯,谢谢~回去翻看翻看相关资料学习一下~
ZangXT
2008-12-22
打赏
举报
回复
[Quote=引用 45 楼 enzymer 的回复:]
引用 44 楼 ZangXT 的回复:
引用 43 楼 enzymer 的回复:
问个问题:字符串常量池里有对象吗?
如果没有的话,那么按照云上飞翔的解释,这道题的答案就是0个了
看jdk文档中对intern方法的说明就知道了.
谢谢ZangXT, 根据我对jdk里intern方法阅读后的理解,字符串常量池里的string是算做对象的。
那么~
haojia0716关于常量池中无对象的阐述有误
而我认同NewMoons的看法:
"答案应该是0或者1个,取决于常量…
[/Quote]
对,其实自己查资料还是能得出答案的,比空推测强.
有兴趣可以再看看jvm是如何处理常量池里的字符串的.
class文件中的常量池信息和实际运行时的常量池并不能等同起来.
roonten
2008-12-22
打赏
举报
回复
就1个
邵钏
2008-12-22
打赏
举报
回复
[Quote=引用 44 楼 ZangXT 的回复:]
引用 43 楼 enzymer 的回复:
问个问题:字符串常量池里有对象吗?
如果没有的话,那么按照云上飞翔的解释,这道题的答案就是0个了
看jdk文档中对intern方法的说明就知道了.
[/Quote]
谢谢ZangXT, 根据我对jdk里intern方法阅读后的理解,字符串常量池里的string是算做对象的。
那么~
haojia0716关于常量池中无对象的阐述有误
而我认同NewMoons的看法:
"答案应该是0或者1个,取决于常量池中是否已经存在了那个字符串。"
ZangXT
2008-12-22
打赏
举报
回复
[Quote=引用 43 楼 enzymer 的回复:]
问个问题:字符串常量池里有对象吗?
如果没有的话,那么按照云上飞翔的解释,这道题的答案就是0个了
[/Quote]
看jdk文档中对intern方法的说明就知道了.
邵钏
2008-12-22
打赏
举报
回复
问个问题:字符串常量池里有对象吗?
如果没有的话,那么按照云上飞翔的解释,这道题的答案就是0个了
jhr924
2008-12-21
打赏
举报
回复
[Quote=引用 28 楼 jiangnaisong 的回复:]
引用 2 楼 sbfivwsll 的回复:
一个,
String s = "a" + "b" + "c" + "d" + "e";
在虚拟机中,被解释为:String s=(new StringBuffer().append("a").append("b").append("c")...).toString();
因此,只产生了一个对象
答:自从人们知道,String的+被解释成:StringBulder类的append(..)之后,到那儿都这是这个.害人啦!学东西,一定要理解它的真正的本质啊.
知道JAVAC编译器有一个基本的"合并已知量"的优化功能否?
…
[/Quote]
问下:是不是
String a="aaaaa";
String s = a + "b" + "c" + "d" + "e";
这样 才会用到StringBulder类的append,
ThinkingInJava110
2008-12-21
打赏
举报
回复
mark!
加载更多回复(36)
【Java深入理解】
String
str = “a“ + “b“ + “c“到底
创建
了
几个
对象
?
String
str = “a” + “b” + “c"到底
创建
了
几个
对象
?这是我们在讨论中最经常遇到的一个问题同时也是面试题。我们都知道在Java中从”.java"文件编译成".class"文件的过程,会有一个优化器去优化我们的代码。这个...
Java:面试题:
String
s=new
String
(“abc“)
创建
了
几个
对象
?
紧接着这段代码之后的往往是这个问题,那就是这行代码究竟
创建
了
几个
String
对象
呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个。 接下来我们就从这道题展开,一起回顾一下与
创建
String
对象
相关的一些JAVA...
String
s=new
String
("abc")
创建
了
几个
对象
?
创建
了
几个
对象
,我先前理解有误。 总结各种
看法
,因为有new,所以堆中必然有一个
对象
。另外,如果常量池中已有"Hello World",则不
创建
,没有,则在常量池中
创建
。所以这句代码,究竟在内存中
创建
一个还是两个...
Java:面试题:
String
s=new
String
("abc")
创建
了
几个
对象
?
紧接着这段代码之后的往往是这个问题,那就是这行代码究竟
创建
了
几个
String
对象
呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个。 接下来我们就从这道题展开,一起回顾一下与
创建
String
对象
相关的一些JAVA...
不起眼的网上面试题——
String
s = new
String
(“xyz”);
创建
了
几个
字符串
对象
?(二)
不会写博客,写点东西练练手,如有不足,还请指教。
String
s = new
String
...
创建
了
几个
字符串
对象
? 相信不少人都看过这道面试题,而且都知道答案是:两个
对象
的确从不少的面试题总结里,答案都是两个; 例: ...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章