【问题标题】:Java return keyword analysisJava返回关键字分析
【发布时间】:2016-02-09 02:15:38
【问题描述】:

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

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

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

我的问题是关于 return 声明及其工作原理。 当我们将 5 的值发送到方法 2 时,我们是否真的这样做了:

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

  1. return 5 + 5
  2. int value = 5 + (5 + 5)

它将在第一种方法中完成所有计算。还是将 5 发送到方法 2,在 method2return 10method1 中计算 5 + 5, 并将值设置为 15。

所以它看起来像这样:

  1. 在方法 2 中计算 5 + 5
  2. 返回 10
  3. int 值 = 5 + 10

我不完全确定我对此的分析是否正确,但我问的原因是因为我在使用 toString() 方法时遇到了一些混淆。 当我在子类中覆盖 toString 方法,并调用对象类的 toString 方法(通过调用super.toString()),它返回一个字符串。

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

抱歉,如果这有点难以理解。有点难以用言语表达。让我知道你们的想法,并保持健康!

【问题讨论】:

  • “我不完全确定我对此的分析是否正确,但我问的原因是因为我在使用 toString() 方法时遇到了一些困惑。”恕我直言,当您的困惑与继承情况下的toString 相关时,询问有关以基本静态方式使用ints 的方法的问题没有多大意义。

标签: java return expression keyword operator-precedence


【解决方案1】:

method2 返回单个 int。它计算 5 + 5 并返回 10。

现在,关于让您感到困惑的问题:

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

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

【讨论】:

  • 您好,您可以对真正的问题进行(充分了解和合理的)猜测。 :-)
  • @T.J.Crowder 没有涉及猜测。 OP说明了提出问题的原因。 :)
  • 哦,我读过那一段。但要从中提取意义,嗯,我认为这涉及到一些猜测。
【解决方案2】:

这都是关于和传递值。

  • 当您调用method1 时,它会调用method2(5)

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

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

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

  • method1 将值 15 传递给 System.out.println,后者将其转换为字符串并输出。

所以method1method2 中接收计算的结果,而不是在method1 本身中进行计算的抽象事物。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多