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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾波 中级黑马   /  2013-11-28 12:48  /  1497 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2013-11-28 19:51:27
沙发
JDK1.5之后有自动装箱拆箱的新特性,这个我个人理解是
String s = new String("a")+new String("b")+new String("c")+new String("d");
应该是5个对象。个人理解。
回复 使用道具 举报
一共创建了七个对象
因为String是被final修饰的    所以不可更改
创建的对象是
a b c d ab abc abcd
回复 使用道具 举报
个人认为是七个对象,“a”,“b”,“c”,“d”,“ab”,“abc”,“abcd”.因为String类是一个不可改变类,当内容一旦发生改变的时候都要产生一个新的对象。String的加法操作是顺序进行的,首先加法操作子是四个对象这个没什么疑问,每进行一次加法操作的时候都要生成一个对象,所以是七个对象。
回复 使用道具 举报
一个String对象,对于常量编译时即完成计算,编译时就变成了
  1. String s="abcd";
复制代码

这是字面上的,指的是String对象只有一个。但是如果不是指String对象的话,就得看源码了。
关于String的原理,曾经看过一个帖子说过这个问题,好像需要创建三个对象。

回复 使用道具 举报
本帖最后由 低调的奢华 于 2013-11-29 15:11 编辑

而像楼上说的
  1. String s = new String("a")+new String("b")+new String("c")+new String("d");
复制代码
这和
  1. String s="a"+"b"+"c"+"d";
复制代码
是有区别的
String s="a"+"b"+"c"+"d";这是常量是可以使用java的常量池技术的,而用new String()创建的字符串不是常量,不能在编译期就确定,所以new String()创建的字符串不能放入常量池中,他们有自己的地址空间。
这就牵扯到java常量池的概念,不懂的百度一下就知道了。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马