Java 更改MethodHeaders中的参数
我在一个旧项目中发现了一些旧代码。我不明白它是怎么工作的。 让我们看一看Java 更改MethodHeaders中的参数,java,Java,我在一个旧项目中发现了一些旧代码。我不明白它是怎么工作的。 让我们看一看 public class Test{ int someNumber = 1337; public void someMethode(){ calledMethode(someNumber, someNumber=42); } public void calledMethode(int _oldValue, int _newValue) { System.out.println("Show _old
public class Test{
int someNumber = 1337;
public void someMethode(){
calledMethode(someNumber, someNumber=42);
}
public void calledMethode(int _oldValue, int _newValue) {
System.out.println("Show _oldValue: "+_oldValue);
System.out.println("Show _newValue: "+_newValue);
}
}
我希望结果是:
Show _oldValue: 42
Show _newValue: 42
事实上,我得到了以下结果:
Show _oldValue: 1337
Show _newValue: 42
为什么会这样?谢谢你的帮助,祝你度过愉快的一天 结果是预期的,原因是子表达式从左到右求值
class Test1 {
public static void main(String[] args) {
String s = "going, ";
print3(s, s, s = "gone");
}
static void print3(String a, String b, String c) {
System.out.println(a + b + c);
}
}
给出结果:走,走,走
请参阅行为是否正确。查看下面的
someMethode()
字节码。someNumber
值首先加载到堆栈中,然后推送新值。当我们调用该方法时,JVM将从堆栈中加载旧值和新值
public void someMethode();
Code:
0: aload_0
1: aload_0
2: getfield #7 // Field someNumber:I
5: aload_0
6: bipush 42
8: dup_x1
9: putfield #7 // Field someNumber:I
12: invokevirtual #13 // Method calledMethode:(II)V
15: return
阅读简单回答:
public class Test{
int someNumber = 1337;
public void someMethode(){
calledMethode(someNumber, someNumber=42);
}
public void calledMethode(int _oldValue, int _newValue) {
System.out.println("Show _oldValue: "+_oldValue);
System.out.println("Show _newValue: "+_newValue);
}
}
在方法-someMethode中,您要传递两个参数,第一个参数是someNumber,正如您在类的开头声明的,它包含1337。因此,1337将被传递,但在第二个参数中,您已使用新值42重新分配变量someNumber,因此42将被传递
如果希望输出为42,42,则代码应如下所示:
public class Test{
int someNumber = 42;
public void someMethode(){
calledMethode(someNumber, someNumber);
}
public void calledMethode(int _oldValue, int _newValue) {
System.out.println("Show _oldValue: "+_oldValue);
System.out.println("Show _newValue: "+_newValue);
}
}