当前位置: 技术问答>java相关
在一个方法如:public Vector getDistinctVector(Vector old,Vector new),如何可以保证 old 不被改写,因为old是从外面传入来的,old本
来源: 互联网 发布时间:2015-11-03
本文导语: 在一个方法如:public Vector getDistinctVector(Vector old,Vector new),如何可以保证 old 不被改写,因为old是从外面传入来的,old本身并没有限制! 可不可以在上面的参数中设什么保留字可以保证不被改写? | ...
在一个方法如:public Vector getDistinctVector(Vector old,Vector new),如何可以保证 old 不被改写,因为old是从外面传入来的,old本身并没有限制! 可不可以在上面的参数中设什么保留字可以保证不被改写?
|
clone也不能完全解决问题,
clone仅CLONE了VECTOR自身,但并没有实现深层CLONE,
VECTOR里的对象仍然是一样(方法内与方法外)(==)
clone仅CLONE了VECTOR自身,但并没有实现深层CLONE,
VECTOR里的对象仍然是一样(方法内与方法外)(==)
|
clone也不能完全解决问题,
clone仅CLONE了VECTOR自身,但并没有实现深层CLONE,
VECTOR里的对象仍然是一样(方法内与方法外)(==)
final也不能完全解决问题,
final仅不允许修改VECTOR自身,但VECTOR内的对象仍可修改,
如果你要安全,可能要自己写CLONE方法,实现深层CLONE
如果想完全解决问题,
clone仅CLONE了VECTOR自身,但并没有实现深层CLONE,
VECTOR里的对象仍然是一样(方法内与方法外)(==)
final也不能完全解决问题,
final仅不允许修改VECTOR自身,但VECTOR内的对象仍可修改,
如果你要安全,可能要自己写CLONE方法,实现深层CLONE
如果想完全解决问题,
|
final
只能只初始化的时候给值
只能只初始化的时候给值
|
把old的取出的值在方法用到时候 clone一下 或new一个
|
克隆一个后就不会改了,因为克隆是另创建了一个内容一样的Vector,但在内存钟的地址已经变了,所以再传递时(注意是传引用,传值就没这么麻烦了)不会再影响另一个了。
|
在声明该方法的时候,对参数进行限制
public Vector getDistinctVector( final Vector old,Vector new)
加上final关键字
public Vector getDistinctVector( final Vector old,Vector new)
加上final关键字
|
很烦人的问题
|
解决办法:笨的
在方法外另外生成一个Vector对象(V2),把原来的Vector(V1)的值copy过去,
参数使用的时候V1,方法使用完毕用V2替换掉V1
封装一下,就可以安全地使用了
在方法外另外生成一个Vector对象(V2),把原来的Vector(V1)的值copy过去,
参数使用的时候V1,方法使用完毕用V2替换掉V1
封装一下,就可以安全地使用了