В Java вы не можете этого сделать (по крайней мере, если вы буквально подразумеваете свой вопрос).
Какова ваша ситуация?Что-то похожее на:
// This is the aTreeNode instance.
TreeNode a = new TreeNode("ValueA", 4711, parentA, leftChildA, rightChildA);
// This is the aTreeNode instance.
TreeNode b = new TreeNode("ValueB", 4712, parentB, leftChildB, rightChildB);
У вас есть две переменные a
и b
, ссылающиеся на каждый экземпляр TreeNode
(который я назвал aTreeNode
и bTreeNode
, просто чтобы дать им имена, которые яможно поговорить)И эти экземпляры имеют разные значения в своих полях.Давайте изобразим это:
a -> aTreeNode instance
------------------
"ValueA"
4711
-> parentA instance
-> leftChildA instance
-> rightChildA instance
b -> bTreeNode instance
------------------
"ValueB"
4712
-> parentB instance
-> leftChildB instance
-> rightChildB instance
Если вы вызываете метод, подобный swap(a, b)
, метод получает ссылки на экземпляры aTreeNode
и bTreeNode
.Поскольку метод не знает, откуда взялись эти ссылки (в нашем случае это переменные a
и b
, но он также может быть элементом массива или результатом вызова какого-либо другого метода), лучше всего этоможно сделать, чтобы поменять содержимое внутри этих экземпляров:
a -> aTreeNode instance
------------------
"ValueB"
4712
-> parentB instance
-> leftChildB instance
-> rightChildB instance
b -> bTreeNode instance
------------------
"ValueA"
4711
-> parentA instance
-> leftChildA instance
-> rightChildA instance
Итак, после вызова swap(a, b)
, a
все еще ссылается на экземпляр aTreeNode
, а b
на bTreeNode
, онитолько поменял их содержимое.И такие радикальные изменения содержимого экземпляра плохо вписываются в философию Java, что приводит к проблемам со многими библиотечными классами, например, со всеми видами коллекций и карт.
Итак, вам лучше поменяться местами.две переменные без вызова метода:
TreeNode a = new TreeNode("ValueA", 4711, parentA, leftChildA, rightChildA);
TreeNode b = new TreeNode("ValueB", 4712, parentB, leftChildB, rightChildB);
TreeNode temp = a;
a = b;
b = temp;
Это намного быстрее, чище, и результат:
a -> bTreeNode instance
------------------
"ValueB"
4712
-> parentB instance
-> leftChildB instance
-> rightChildB instance
b -> aTreeNode instance
------------------
"ValueA"
4711
-> parentA instance
-> leftChildA instance
-> rightChildA instance