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/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值