Java返回关键字分析

时间:2015-11-08 08:33:56

标签: java return expression keyword operator-precedence

有人曾发布过这段简短的代码。

public void method1() {
int value = 5 + method2(5);
System.out.println(value);
}

public int method2(int param) {
return param + 5;
}

我的问题是关于return语句及其工作原理。 当我们将5的值发送给method2时,我们确实这样做了:

return 5 + 5method1,在方法1中计算5 + 5是什么? 所以我的意思是它在视觉上看起来像:

  1. return 5 + 5
  2. int value = 5 + (5 + 5)
  3. 将执行第一种方法中的所有计算。或者它会向方法2发送5,在method2中计算5 + 5,在return 10计算到method1, 并将值设置为15.

    所以它看起来像这样:

    1. 在method2中计算5 + 5
    2. 返回10
    3. int value = 5 + 10
    4. 我不完全确定我对此的分析是否正确,但我要问的原因是因为toString()方法遇到了一些混乱。 当我在子类中覆盖toString方法并调用对象类toString方法(通过调用super.toString())时,它返回一个字符串。

      我很困惑为什么该字符串包含对子类的引用,而不是Object类。所以我认为我们将有一个包含对象类名称的字符串,但我有一个包含子类名称的字符串。我唯一的结论是,这与如何评估回报有关?

      很抱歉,如果这有点难以理解。这有点难以言喻。让我知道你们的想法,并且做得好!

2 个答案:

答案 0 :(得分:2)

method2会返回一个int。它计算5 + 5并返回10.

现在,对于让你困惑的问题:

toString()类中实现的Object的默认实现(您可以在下面看到)返回一个String,其中包含为其执行该方法的实例的类的名称(是通过调用getClass().getName())获得的。因此,如果您的班级覆盖toString()并调用super.toString(),则会获得包含班级名称的字符串。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

答案 1 :(得分:0)

全部关于并传递值。

  • 当您致电:help i_CTRL-V_digit时,会拨打method1

  • method2(5)获取收到的 5,将值method2添加到其中,并将其返回值设置为5

  • 10收到值10和调用method1的结果。

  • method2将值5添加到其中,并将值15保存在其method1变量中。

  • value将值15传递给method1,将其转换为字符串并输出。

所以System.out.println收到method1中计算的结果,而不是在method2内进行计算的抽象事物。