Magic将变量传递给Java中的参数

时间:2018-03-19 19:45:48

标签: java string parameters

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编译器的工作方式!

3 个答案:

答案 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"