这个Java代码:
public class XYZ {
public static void main(){
int toyNumber = 5;
XYZ temp = new XYZ();
temp.play(toyNumber);
System.out.println("Toy number in main " + toyNumber);
}
void play(int toyNumber){
System.out.println("Toy number in play " + toyNumber);
toyNumber++;
System.out.println("Toy number in play after increement " + toyNumber);
}
}
将输出这个:
玩中的玩具编号 5
增量 6 后正在玩的玩具编号
玩具号主5
在 C++ 中,我可以通过引用传递 toyNumber
变量以避免阴影,即创建相同变量的副本,如下所示:
void main(){
int toyNumber = 5;
play(toyNumber);
cout << "Toy number in main " << toyNumber << endl;
}
void play(int &toyNumber){
cout << "Toy number in play " << toyNumber << endl;
toyNumber++;
cout << "Toy number in play after increement " << toyNumber << endl;
}
C++ 输出将是这样的:
玩中的玩具编号 5
增量 6 后正在玩的玩具编号
玩具编号主6
我的问题是——假设 Java 是按值传递而不是按引用传递, Java 中获得与 C++ 代码相同输出的等效代码是什么?
原文由 Student 发布,翻译遵循 CC BY-SA 4.0 许可协议
你有几个选择。最有意义的那个真的取决于你想做什么。
选择 1:使 toyNumber 成为类中的公共成员变量
然后将对 MyToy 的引用传递给您的方法。
选择 2:返回值而不是通过引用传递
此选择需要对 main 中的调用站点进行小的更改,使其显示为
toyNumber = temp.play(toyNumber);
。选择 3:将其设为类或静态变量
如果这两个函数是同一类或类实例上的方法,则可以将 toyNumber 转换为类成员变量。
选择 4:创建一个 int 类型的单元素数组并传递它
这被认为是 hack,但有时用于从内联类调用返回值。