t18267174450 2016-04-14 10:43 采纳率: 50%
浏览 8075
已采纳

java 在方法中修改MAP的值结果原MAP的值也发生了变化

public class Switch4
{
//获取指定品种的主力合约和交易合约
private void getCorrectContract(Map contractMap)
{
Map correctContractMap = contractMap; //原主力交易合约用来判断是否换月
correctContractMap.put("main_contract","15451"); //我在这里改变了MAP的值
correctContractMap.put("trade_contract","15122");
}
private void updataDataBase()
{

Map corMap = new HashMap();
corMap.put("main_contract","dfdfdfdf");
corMap.put("trade_contract","ttggg");
getCorrectContract(corMap); //结果contractList中MAP的值也改变了

System.out.println("完成"+corMap.get("main_contract"));
}
public static void main(String[] args)
{
Switch4 sw = new Switch4();
sw.updataDataBase();
}
}

打印结果
完成15451

map都什么特别的

  • 写回答

5条回答

  • Chenay_ 2016-04-15 06:21
    关注

    public class Switch4
    {
    //获取指定品种的主力合约和交易合约
    private void getCorrectContract(Map contractMap)
    {

    Map correctContractMap = contractMap; //原主力交易合约用来判断是否换月
    这只是对contractMap的引用进行的复制, 在内存中还是指向同一块内存区域,你修改correctContractMap的 也相当于修改了同一个内存块

    这里应该这样写
    重新开辟一个内存空间,将原map整个进行深度的复制 这样2个map都是独立的个体
    Map correctContractMap = new HashMap();
    contractMap.putAll(contractMap);

    correctContractMap.put("main_contract","15451"); //我在这里改变了MAP的值
    correctContractMap.put("trade_contract","15122");
    }
    private void updataDataBase()
    {
    Map corMap = new HashMap();
    corMap.put("main_contract","dfdfdfdf");
    corMap.put("trade_contract","ttggg");
    getCorrectContract(corMap); //结果contractList中MAP的值也改变了
    System.out.println("完成"+corMap.get("main_contract"));
    }
    public static void main(String[] args)
    {
    Switch4 sw = new Switch4();
    sw.updataDataBase();
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题