假设我在Java常规对象中没有任何特殊的拷贝构造函数等,并且我想在对象之间进行交换,这是否有效:
MyObject objTmp;
objTmp = obj_1;
obj_1 = obj_2;
obj_2 = objTmp;
或者我应该考虑引用 - objTmp
引用obj_1
,object_1 = obj_2
最后objTmp
也会引用obj_2
所以最后一行obj_2 = objTmp
没用,交换失败了?
谢谢,
答案 0 :(得分:1)
这都是关于引用的,因此它可以正常工作。
第一次赋值后,objTmp引用obj_1引用的对象。 在第二个之后,obj_1引用了obj_2引用的对象,因此将第一个对象的引用保存到objTmp中是好的。
等等......
答案 1 :(得分:1)
通常交换处理值。
您只需要交换参考资料。
答案 2 :(得分:1)
使用String
类对象尝试以下代码段。
public class Swap {
public static void main(String[] args) {
String first = new String("first");
String second = new String("second");
System.out.println(first + " :: " + second);
String temp = first;
first = second;
second = temp;
System.out.println(first + " :: " + second);
}
}
<强>输出:强>
第一个::第二个
第二个::第一个
最终
objTmp
也会指向obj_2
。
这不会发生。仅仅因为obj_1引用obj_2
并不意味着更新objTemp
中的引用。
objTmp
将始终指向明确分配给它的引用(obj_1
)。