[英]Magic passing variable to parameter in Java
public class experiment3 {
private static void mystery(String foo, String bar, String zazz) {
System.out.println(zazz + " and " + foo + " like " + bar);
}
public static void main(String[] args) {
String foo = "peanuts";
String bar = "foo";
mystery(bar, foo, "John");
}
}
有人可以向我解释一下输出结果如何形成吗?
输出将是:
约翰和福如花生
我了解该参数。 扎兹这个名字总是约翰。
我不明白最后两个参数。 形成了?
PS:请帮助我了解这最后两个参数是如何形成的。 如果有可能用示意图表示来更好地理解java编译器的工作方式!
Java编译器不关心作为方法调用的参数传入的变量的名称,因为它与所调用方法的参数的名称有关。 仅值的位置很重要。
"foo" "peanuts"
| |
v v
mystery( bar , foo , "John")
| | |
v v v
private static void mystery(String foo, String bar, String zazz)
此处变量名称的混合顺序在这里没有任何用途,除非造成混淆。
zazz + " and " + foo + " like " + bar
变
约翰和福如花生
当您调用“神秘”方法时,您将给出以下参数:
bar(="foo"), foo(="peanuts), "John".
这些变量的名称与声明方法的方式无关,仅与它们的内容无关,因此,该方法将接收以下参数:
foo(="foo"), bar(="peanuts"), zazz(="John")
我在此代码中看不到任何神秘之处:您必须遵循方法签名中参数的顺序以及此方法调用的参数顺序。
如果在两个方向上都遵循相同的顺序,并且使用了相同的变量名foo,bar和zazz; 显示器的输出将很简单:
"john and peanuts like foo".
但是,由于顺序已经颠倒,因此必须遵循方法签名中每个变量的位置,才能知道将要返回的值。 所以在签名上:
foo = 1, bar = 2 and zazz = 3
但是在通话中,我们有:
bar = 1 and its value = foo
foo = 2 and its value = peanuts
从哪里显示zazz = john的值
"john and foo like peanuts"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.