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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘元明 中级黑马   /  2012-3-19 12:12  /  2295 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1.  String a= “abc”;
   String b= “abc”;
2.  String a = “ab”+"ab";
3.  String a= "ab"+"cd";
4. String a="ab";
    String b= a+"ab";
请问它们都各自创建了几个String对象,下边是本人理解,请问对吗,如果不对,请指教哈
1.一个  两个不同引用指向同一个String对象 所以对象只有一个
2、 一个 字符串的添加内部是通过StringBuilder实现,每次添加的都是存在的数据对象地址,地址几个就几个对象
3、4  两个  理解同上

5 个回复

倒序浏览
我是这样理解的:
1.一个,a,b指向同一个对象"abc"
2.两个,一个是"ab",一个是"abab"
3.三个,分别是"ab","cd","abcd"
4.两个,"ab"和"abab"
回复 使用道具 举报
理解同楼上,期待老师讲解此案例
回复 使用道具 举报
个人理解:
1.一个,
2.一个
3.一个,
4.两个,
回复 使用道具 举报
到底有几个String对象,你把每个String引用赋一个值,再用"=="比一下就知道了:
1.
String a="abc";
String b="abc";
System.out.println(a==b);
输出为True,所以堆里只有一个String对象。
2.
String c="ab";
String d="ab";
String e=c+d;
System.out.println(c==d);
System.out.println(c==e);
System.out.println(e==d);
输出为
True
False
False
所以堆里创建了两个String对象。
3.
String a="ab";
String b="cd";
String c=a+b;
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);
输出为
False
False
False
所以堆里创建了3个String对象。
4.
String a="ab";
String b= a+"ab";
System.out.println(a==b);
输出为:
False
所以堆里创建了两个String对象,其实第四个和第二个是一样的。
回复 使用道具 举报
我也赞成2楼的说法!主要的理解最好是画出Datasegement区域里一分析就全明白了...因为String 字符串常量是存放在Datasegement里的。比方说:存在了一个"ab",那么第二次定义使用"ab"的时候,会先在常量池Datasegement里去找出是否有"ab"。有就直接取出来用就行了,没有的话再创建一个String的对象...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马