当前位置: 技术问答>java相关
请教一个java中有关对象使用的问题
来源: 互联网 发布时间:2015-06-11
本文导语: 有一段程序大体如下: ModelA aModel = ModelA(); ModelB bModel = ModelB(); //ModelA, ModelB 都extend于Model; aModel = processA(); bModel = processB(); HashMap aMap = new HashMap(); aMap.put("a", aModel); aModel = modelCopy(bModel, aModel); //将bModel...
有一段程序大体如下:
ModelA aModel = ModelA();
ModelB bModel = ModelB();
//ModelA, ModelB 都extend于Model;
aModel = processA();
bModel = processB();
HashMap aMap = new HashMap();
aMap.put("a", aModel);
aModel = modelCopy(bModel, aModel);
//将bModel中所有的值转到aModel中
这时我发现aMap中的aModel发生了变化!
这是否使用的是同一个指针?还是什么原因?
是不是只有对象使用才会出现这种问题?
这种模式会经常使用,对一个类new了一个对象后,
以下所有对这个类的操作就不想再生成其它对象了,
只会用最初new的对象,怎么办?
ModelA aModel = ModelA();
ModelB bModel = ModelB();
//ModelA, ModelB 都extend于Model;
aModel = processA();
bModel = processB();
HashMap aMap = new HashMap();
aMap.put("a", aModel);
aModel = modelCopy(bModel, aModel);
//将bModel中所有的值转到aModel中
这时我发现aMap中的aModel发生了变化!
这是否使用的是同一个指针?还是什么原因?
是不是只有对象使用才会出现这种问题?
这种模式会经常使用,对一个类new了一个对象后,
以下所有对这个类的操作就不想再生成其它对象了,
只会用最初new的对象,怎么办?
|
哦,不对!你并不是一个类只要一个对象,你应该clone一个aModel,并把它put到你的aMap中。
|
当你不想改变对象的值时,可以从新clone一个呀
|
是使用了同一个指针,但java里好像没有指针这一说法。
aModel是个句柄,指向用new创建的那个实例。对aModel的改变就是对实例的改变。
aModel是个句柄,指向用new创建的那个实例。对aModel的改变就是对实例的改变。