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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

24 个回复

倒序浏览
一个对象,+ 只是字符串相连接
回复 使用道具 举报
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,
           String s ="a" + "b" + "c" + "d";
           System.out.println(s== "abcd");
回复 使用道具 举报
n个对象吧
a
b
c
d
ab
ac
ad
.....
abc
......
abcd
回复 使用道具 举报
双引号里内容表示字符串,一个双引号就建立了一个String对象,就有了4个;
"a"+"b"=“ab”一个;"ab"+"c"=“abc”一个;"abc"+"d"=“abcd”一个,这里有三个;
最后赋值给s的是最后执行完"a" + "b" + "c" + "d"之后的结果,即“abcd”;
因此,这句话在内存中应该是建立了4+3=7个对象。
回复 使用道具 举报
String s = “a”+”b”+”c”; //创建了5个对象
String s = “a”+”b”+”c”+”d”; //创建了7个对象
String s = “a”+”b”+”c”+”d”+”e”; //创建了9个对象
String s = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象
注: String是一个不可变的字符序列,每次字符相加操作都会有新的对象形成。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 3 0
学习了..
回复 使用道具 举报
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,
           String s ="a" + "b" + "c" + "d";
           System.out.println(s== "abcd");
最终打印的结果应该为true。
回复 使用道具 举报
彭飞 中级黑马 2014-5-19 00:17:48
9#
兄兄,我的认识里是这样的:

String s="a"+"b"+"c"+"d";.  //  创建 4个
String s="ab"+"c"+"d";//创建 1个
String s="abc"+"d";//创建 1个
String s="abcd";//创建 1个

所以一开始到最后一共创建了7个对象


回复 使用道具 举报
好蛋疼的问题啊,有什么意义吗
回复 使用道具 举报
:o学习了
回复 使用道具 举报
alax 中级黑马 2014-5-19 05:31:08
12#
好像是创建一个对象吧
回复 使用道具 举报
张鹏宇 来自手机 中级黑马 2014-5-19 12:10:22
13#
张斌 发表于 2014-5-18 21:50
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";

正解。。。
回复 使用道具 举报
"+"表示连接,您这样写最终的结果为abcd,其实创建了一个对象!
回复 使用道具 举报
张斌 发表于 2014-5-18 21:50
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";

为什么第一行输出时false啊,s2不指向"ab"那它指向什么地方?
回复 使用道具 举报
长见识了
回复 使用道具 举报
就是一个对象
回复 使用道具 举报
先进行右边的运算,在将运算后的结果赋值引用变量s,s只指向了一个对象即”abcd“,
回复 使用道具 举报
amao 初级黑马 2014-5-21 00:37:16
19#
看代码:
String s1 = "a"+"b"+"c"+"d";
String s2 = "abcd";
System.out.println(s1==s2);
亲测结果为true。
因为s2只创建了一个对象,所以s1也只创建了一个对象。
回复 使用道具 举报
内存中创建s的时候会创建多个字符串对象(),但编译运行后内存中只存在一个对象,剩下的被GC回收了!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马