社区
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
不知道对否
...全文
1331
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)
String
s=new
String
("abc")
创建
了
几个
对象
?
答案是2个,大家肯定都知道。面试中经常出现的问题,今天认真分析一下。 1、 Sting s 定义了一个变量s,没有
创建
对象
; 2、 = 赋值,将某个
对象
的引用(句柄)赋给s ,没有
创建
对象
; 3、 “abc”
创建
一个
对象
; 4、 new
String
()
创建
一个
对象
。 首先,总结一下java
创建
对象
的方式:new、clone、反射、反序列化 再看一下 St
java中
String
s = new
String
("abc")
创建
了
几个
对象
一、java中
String
s = new
String
("abc")
创建
了
几个
对象
答案是两个,现在我们具体的说一下:
String
s = new
String
("abc"); 首先我们要明白两个概念,引用变量和
对象
,
对象
一般通过new在堆中
创建
,s只是一个引用变量。 所有的字符串都是
String
对象
,由于字符串文字的大量使用,java中为了节省时间,在编译阶段,会把字符串文字放在文字池中...
String
str =“a“ + “b“ 与
String
str = new
String
(“a“) + new
String
(“b“) 的区别(jdk1.8环境利用javap命令探究)
今天,又在思考一个常见的问题,那就是字符串
创建
对象
系列。发现了一个很多人都模糊不清的问题,那就是
String
str =“a” + “b” 与 Strin str = new
String
(“c”) + new
String
(“d”) 把
对象
创建
在了哪里?
创建
了
几个
字符串
对象
? 话不多出,show my code:
String
str =“a” + “b” package com.bestqi...
String
s="a"+"b"+"c"+"e" 总
共
创建
了
几个
对象
?
问:
String
s="a"+"b"+"c"+"e" 总
共
创建
了
几个
对象
? 答案:1个 当我看到这个问题的时候,我的答案是错的,当我查阅资料后最终确认答案是1个。然后经过了大量的测试,最终答案是1个
对象
。 测试:
String
s1="a";
String
s2=s1+"b";
String
s3="a"+"b"; System.out.println(s2=="ab"); S
String
s=new
String
("abc")
创建
了
几个
对象
?
详细内容参考:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html 摘要: 1. 我们常用的
创建
一个类的实例(
对象
)的方法有以下两种: 一、使用new
创建
对象
。例如
String
s2 = new
String
("abc"); 二、调用Class类的newInstance方法,利用反射机制
创建
对象
。
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章