黑马程序员技术交流社区
标题:
集合的一些问题
[打印本页]
作者:
唐溪永
时间:
2012-2-23 23:31
标题:
集合的一些问题
Map df = new HashMap();
df.put( "a ",new int[24]);
int[] count1=(int[])(df.get( "a "));
count1[1]=count1[1]+10;
int[] count2=(int[])(df.get( "a "));
System.out.println( "count= "+count2[1]);
Map df1 = new HashMap();
df.put( "a ", "12345 ");
String count11=(String)(df.get( "a "));
count11+= "yuiii ";
String count12=(String)(df.get( "a "));
System.out.println( "count12= "+count12);
打印出来的结果是
count=10
count12=12345
为什么df里面的值可以改变而df1就没改变
但换成
Map df = new HashMap();
df.put( "a ",new int[24]);
int[] count1=(int[])(df.get( "a "));
count1[1]=count1[1]+10;
int[] count2=(int[])(df.get( "a "));
System.out.println( "count= "+count2[1]);
Map df1 = new HashMap();
df.put( "a ",new String[24]);
String[] count11=(String[])(df.get( "a "));
count11[1]= "yuiii ";
String[] count12=(String[])(df.get( "a "));
System.out.println( "count12= "+count12[1]);
打印出来的结果是
count=10
count12=yuiii
这样为什么就可以改变呢?
急呀
作者:
H07000223
时间:
2012-2-23 23:44
本帖最后由 H07000223 于 2012-2-24 00:06 编辑
总算看明白了:
对于第一个HashMap对象df:[key=>"a",
value=>数组
]
对于第二个HashMap对象df1:[key=>"a",
value=>字符串
]
我想可能是因为数组是对象的缘故:两次取得的数组对象来自同一内存空间吧。你可以打印试一下:System.out.println(count1==count2);
而count11和count12是指向两个对象的:
count11 += "yuiii";
count11的引用已经发生变化了。对于字符串这种类型的对象一旦产生了就不能改变了。
拼接的结果就是产生了新的字符串对象
作者:
张建银
时间:
2012-2-24 00:01
你可以简单认为new出的对象是可变对象,而“123”是常量对象,常量对象在栈中没有引用变量来保存该对象在堆中值的地址
作者:
tanlei200620
时间:
2012-2-24 01:11
df.put( "a ",new int[24]); df.put( "a ",new String[24]); 都是存放的 引用的地址,
而 df.put( "a ", "12345 "); 存放的是字符串“12345”的地址,
count1[1]=count1[1]+10; 和 count11[1]= "yuiii "; 将引用的地址里存放的值进行了改变
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2