• Java基础——Object使用 Binary


    问题场景:Object中的 Value不是自己预期值。

    具体描述:

         (1)  实例化一个HashMap类型的对象:       

    HashMap<String, Object> hashMap = new HashMap<String, Object>();
    hashMap.put("string", "string");
    hashMap.put("intValue", 10);

         (2) 将该HashMap实例传递给别的类---classC:

    classC.set(hashMap);

         (3) 类classC将该对象继续传递给别的类classA和classB:

    classA.useObject(hashMap);
    classB.useObject(hashMap);

         (4) classB在使用该对象的过程中发现:hashMap.get("intValue") 的值为 18问题即在此处:为何此对象的该值从10变成了18?

     

    解决过程:

         (5) 后来发现,在classA中执行了这样的语句:

    private void useObject(HashMap<String, Object> hashMapPara){
    
             HashMap<String, Object> hashMap = hashMapPara;
             hashMapAnother.put("intValue", (Integer) hashMap.get("intValue") + 8);     
    
    }

           并且,classA的useObject(HashMap<String, Object> hashMapPara) 方法执行后 classB的hashMap.get("intValue")语句才执行;

         (6) 由此可见:  

                Java对象(Object)的传递,传递的为引用,而非真正的实例。

                new 一个实例,即建立一个物理意义上的Object, 使用 Object object = getObject();语句仅仅是将该实例的地址值得到,针对Object的操作实际上操作的最初new的那个物理意义上的实例。

                因此,如果传递一个Object给不同的两个类,两个类分别对该Object进行操作,尤其要注意Object的value改变的问题。

  • 相关阅读:
    界面开发注意要素,降低界面BUG
    软件测试及其重要性
    浅谈自动化测试工具之Selenium
    浅谈探索式软件测试
    浅谈功能测试流程
    关于软件测试中测试用例的重要性
    第1章 性能测试整体认知
    数据库对比,优化
    2、补充介绍
    1、MarkDown基本语法
  • 原文地址:https://www.cnblogs.com/nmj1986/p/2642773.html
Copyright © 2020-2023  润新知