A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-10-9 18:00  /  1950 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这条语句一共创建了多少个对象:
String s="a"+"b"+"c"+"d"+"1"+"";

麻烦  帮我看一哈  怎么分的??模糊。。。。。

评分

参与人数 1黑马币 +10 收起 理由
刘芮铭 + 10 赞一个!

查看全部评分

8 个回复

倒序浏览
我认为一共创建了一个对象。首先看个实例
String s0="hello";
String s1="hello";   
String s2="he" + "llo";   
System.out.println( s0==s1 );   
System.out.println( s0==s2 );  
结果为:
true
true
首先,我们要知结果为道Java 会确保一个字符串常量只有一个拷贝。
因为例子中的 s0和s1中的"hello"都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而"he"和"llo"也都是字符串常量,当一个字 符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中"hello"的一个引用。所以我觉得就一个对象。

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

回复 使用道具 举报
Jordon 发表于 2012-10-9 18:45
我认为一共创建了一个对象。首先看个实例
String s0="hello";
String s1="hello";   

谢谢            
回复 使用道具 举报
二楼分析的很到位!!
回复 使用道具 举报
当然是只有一个对象s了。onlyone。
回复 使用道具 举报
葬天 发表于 2012-10-9 19:27
二楼分析的很到位!!

有木有发现 我们三个  都姓杨???:handshake
回复 使用道具 举报
本帖最后由 柏占肖 于 2012-10-10 00:04 编辑

个人觉得有8个对象
7个String对象:"a"、"b"、"c"+、d"、"1"、""、"abcd1"
1个StringBuffer对象
补充回答
看到这么多人说只创建了一个对象,我又对自己产生了怀疑,于是就看了一下字节码,确实只有一个String类型对象,是我想多了,呵呵……
回复 使用道具 举报
只创建了一个对象,据我理解,一个引用无法同时指向多个实例。javac会将这些字符串自动封装。
回复 使用道具 举报
本帖最后由 缘木求鱼 于 2012-10-9 23:15 编辑

啊,楼主见过竹子(我亲身没见过哦)或者蜈蚣(毛骨悚然)吗?只要是分节的就行。想想吧,那是一个生命,一个整体。--加号(“+”)就是连接body的结点。既然一个整体,自然就在堆内存创建了一个对象

希望比的例子别吓到人{:soso_e144:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马