Java基础——Object使用
2012-08-16 18:14
239 查看
问题场景:Object中的 Value不是自己预期值。
具体描述:
(1) 实例化一个HashMap类型的对象:
(2) 将该HashMap实例传递给别的类---classC:
(3) 类classC将该对象继续传递给别的类classA和classB:
(4) classB在使用该对象的过程中发现:hashMap.get("intValue") 的值为 18。问题即在此处:为何此对象的该值从10变成了18?
解决过程:
(5) 后来发现,在classA中执行了这样的语句:
并且,classA的useObject(HashMap<String, Object> hashMapPara) 方法执行后 classB的hashMap.get("intValue")语句才执行;
(6) 由此可见:
Java对象(Object)的传递,传递的为引用,而非真正的实例。
new 一个实例,即建立一个物理意义上的Object, 使用 Object object = getObject();语句仅仅是将该实例的地址值得到,针对Object的操作实际上操作的最初new的那个物理意义上的实例。
因此,如果传递一个Object给不同的两个类,两个类分别对该Object进行操作,尤其要注意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改变的问题。
相关文章推荐
- 再探Java基础——String.format(String format, Object… args)的使用
- 黑马程序员——Java基础——IO流笔记(ObjectInputStream和ObjectOutputStrem使用示例)
- 再探Java基础——String.format(String format, Object… args)的使用
- 再探Java基础——String.format(String format, Object… args)的使用
- Java基础系列16:使用JSONObject和JSONArray解析和构造json字符串
- 【Java基础之Object类(二)、线程同步(一)】Java中使用Object类的wait,notify,notifyAll做线程调度
- java并发编程之线程同步基础(二)使用锁实现同步
- java基础-BigInteger的使用
- 在Java的Struts框架中ONGL表达式的基础使用入门
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
- JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)14
- Java并发基础(五)-CountDownLatch、CyclocBarrier、Phaser的使用
- Java基础---如何使用Java中的数组(三十)
- 【JAVA基础】this关键字的使用
- java基础之反射(2.class类的使用)
- java基础-Java NIO使用及原理分析
- my[Java基础]使用Ant发布war包
- Java基础学习总结——Map使用相关问题总结
- 【java基础】JSTL标签库的使用
- Java学习之IO流下(转换流,数据流 ,print流 ,object简单使用)