黑马程序员技术交流社区
标题:
关于String的些许思考疑惑
[打印本页]
作者:
刘元明
时间:
2012-3-19 12:12
标题:
关于String的些许思考疑惑
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 两个 理解同上
作者:
段浩亮
时间:
2012-3-19 12:27
我是这样理解的:
1.一个,a,b指向同一个对象"abc"
2.两个,一个是"ab",一个是"abab"
3.三个,分别是"ab","cd","abcd"
4.两个,"ab"和"abab"
作者:
于紫洋
时间:
2012-3-19 14:07
理解同楼上,期待老师讲解此案例
作者:
李成航
时间:
2012-3-19 15:31
个人理解:
1.一个,
2.一个
3.一个,
4.两个,
作者:
许前刚
时间:
2012-3-25 10:29
到底有几个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对象,其实第四个和第二个是一样的。
作者:
吴华二
时间:
2012-3-25 10:43
我也赞成2楼的说法!主要的理解最好是画出Datasegement区域里一分析就全明白了...因为String 字符串常量是存放在Datasegement里的。比方说:存在了一个"ab",那么第二次定义使用"ab"的时候,会先在常量池Datasegement里去找出是否有"ab"。有就直接取出来用就行了,没有的话再创建一个String的对象...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2