java.util.Map小圈套

java.util.Map小陷阱
在WEB开发中总是会用到Map类,并向其中放置一个String类型的数组,然后通过Action的getter和setter方法从页面上拿到对应String数据。最近发现Map类里的所有String[]数据都变成了最后一次put的进入的String[]。debug了好久,总算找到了错误现象,以后引以为戒。

import java.util.HashMap;
import java.util.Map;

public class Test {
public static void main(String[] args) {
Map map = new HashMap();
String[] str = new String[2];
str[0]="AAA";
map.put(1, str);
str[0] = "BBB";
map.put(2, str);
System.out.println(((String[])map.get(1))[0]);
System.out.println(((String[])map.get(2))[0]);
}
//:BBB
//:BBB
}

        代码原来希望输出的是AAA和BBB,但实际却输出了两个BBB。
        map在put的时候仅仅是使用了String[]的引用,并没有真正存储数据。所以当str改变的时候,map里的数据也就随之改变。

       想要避免这样的尴尬,简单点的方法是为str重新申请一个内存空间(str = new String[2]),原来的引用交给map用。

转载于:http://blog.163.com/sunji_2009@126/blog/static/11222932820111020113339432/