有人曾发布过这段简短的代码。
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 + 5
到method1
,在方法1中计算5 + 5是什么?
所以我的意思是它在视觉上看起来像:
return 5 + 5
int value = 5 + (5 + 5)
将执行第一种方法中的所有计算。或者它会向方法2发送5,在method2
中计算5 + 5,在return 10
计算到method1
,
并将值设置为15.
所以它看起来像这样:
我不完全确定我对此的分析是否正确,但我要问的原因是因为toString()
方法遇到了一些混乱。
当我在子类中覆盖toString方法并调用对象类toString方法(通过调用super.toString()
)时,它返回一个字符串。
我很困惑为什么该字符串包含对子类的引用,而不是Object类。所以我认为我们将有一个包含对象类名称的字符串,但我有一个包含子类名称的字符串。我唯一的结论是,这与如何评估回报有关?
很抱歉,如果这有点难以理解。这有点难以言喻。让我知道你们的想法,并且做得好!
答案 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
内进行计算的抽象事物。