在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/
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/