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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gzbbxu 中级黑马   /  2013-6-29 16:42  /  1530 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-7-1 07:52 编辑

1,String str="a"+"b"+"c";
2, String str=new String("abc");
3,String str="abc";
关于3,是没得说,创建的肯定是一个对象。
对于1,2,我是不太理解。String类不是具有连接的功能么?应该是同一个对象才对啊?

7 个回复

倒序浏览
对String str="a"+"b"+"c";有运算符的优先级而言应先算="a"+"b"+"c";   
“+”是连接符,然后再赋给str.
回复 使用道具 举报
对String str="a"+"b"+"c";有运算符的优先级而言应先算="a"+"b"+"c";   
“+”是连接符,然后再赋给str.
回复 使用道具 举报
String str="a"+"b"+"c";
虚拟机自动创建了一个StringBuilder,然后分别对后边的三个字符串调用append方法,最后toString赋值给str
第二个在论坛里找找吧
回复 使用道具 举报
string类是final的,它的对象是不可变的!对于第一个 应该是 对象 a 对象 a+ b  对象 a+ b 对象 a + b + c;
对于第二个,如果本来有“abc”,对象那就是只有一个new出来的对象,如果本来没有,那就是2个对象。
回复 使用道具 举报
L.I.F.E 发表于 2013-6-29 18:01
string类是final的,它的对象是不可变的!对于第一个 应该是 对象 a 对象 a+ b  对象 a+ b 对象 a + b + c ...

第一个是3个!多写了一遍a+b。
就是说:引用变量str的指向不断改变。
回复 使用道具 举报
虽然说对java底层不是太深入理解,但是我想我们按照我们自己的理解方式就可以了
说不如做
  1. String s = "a"+"b"+"c";
  2.                 //问题1,只创建了一个对象
  3.                 System.out.println(s == ("a"+"b"+"c"));
  4.                 String s2 = "abc";
  5.                 //问题3,只创建了一个对象
  6.                 System.out.println(s2 == "abc");
  7.                 String s3 = new String("abc");
  8.                 //问题2,创建了2个对象
  9.                 System.out.println(s3 == "abc");
复制代码

以上代码 打印出结果
回复 使用道具 举报
帖子解决。请及时联系版主改成已解决。不然会漏分的哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马