提问人:rohit 提问时间:4/20/2022 最后编辑:rohit 更新时间:4/20/2022 访问量:90
修改传递给函数的实际变量
Modify the actual variable passed to a function
问:
我有以下代码来重新分配函数中的变量。但这在 main 函数中是不可见的。这可能是因为要重新分配的是本地副本。原始内存位置保持不变。ll1
balance
我怎样才能修改它以便修改实际内容?ll1
public static void main(String[] args) {
Node ll2 = new Node();
Node ll1 = new Node();
balance(ll1,ll2);
}
private static void balance(Node ll1, Node ll2) {
int size1=size(ll1);
int size2=size(ll2);
if(size1==size2){
} else if(size1>size2){
// add size1-size2 zeros as prefix to ll2
ll2=addNodes(ll2,size1-size2);
} else if(size1<size2){
// add size2-size1 zeros as pre
ll1=addNodes(ll1,size2-size1);
}
}
private static Node addNodes(Node node, int num) {
int count = 0;
Node node1 = null;
Node node2 = node;
while (count < num) {
node1 = new Node();
node1.value = 0;
node1.next = node2;
node2 = node1;
count++;
}
return node1;
}
答:
1赞
aleck099
4/20/2022
#1
函数参数传递是单向操作,这意味着您无法编辑传递给您的参数
但是,当您需要编辑的内容不在参数列表中时,这成为可能
例如,创建一个包装类:
public class NodePair {
public final Node n1;
public final Node n2;
public NodePair(Node a, Node b) { n1 = a; n2 = b; }
}
当它传递给你时,你不能修改该对,但你可以通过该对修改 n1 和 n2
评论
0赞
rohit
4/20/2022
是的,这行得通。这是唯一的方法,还是有更好的方法。为这么简单的事情制作一个特殊的包装类感觉有点奇怪
0赞
aleck099
4/22/2022
@rohit 更好的方法是不要让函数修改局部变量。在 java 中不推荐使用
0赞
aleck099
4/22/2022
@rohit 另一种方式:如果通过包装对象传递基本类型(如而不是),则实际上是在传递其引用,因此可以在函数中修改它。这不适用于某些“最终”对象(例如,您永远不能编辑一个,而是重新创建一个)Integer
int
String
String
评论
addNodes
next
Node nll2 = new Node(); Node nll1 = new Node(); balance(ll1,ll2);
调用不会编译,因为没有带有名称的变量,并且不存在balance(ll1,ll2);
ll1
ll2