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");
}
}
有人可以向我解释输出结果时是如何形成的吗?
输出将是:
John和foo喜欢花生
我理解那个参数。名字zazz总是约翰;
我不明白最后2个参数如何。成了什么?!
PS:请帮助我理解这2个最后的参数是如何形成的。 如果有可能使用原理图表示来更好地理解java编译器的工作方式!答案 0 :(得分:3)
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
变为
John和foo喜欢花生
答案 1 :(得分:0)
当你打电话给“神秘”时你给params的方法:
bar(="foo"), foo(="peanuts), "John".
这些变量的名称与声明方法的方式无关,只与它们的内容有关,因此,该方法接收参数:
foo(="foo"), bar(="peanuts"), zazz(="John")
答案 2 :(得分:0)
我在这段代码中看不到任何谜团:你必须遵循方法签名中参数的顺序以及调用此方法的参数顺序。
如果在两个方向上使用相同名称的变量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"