【发布时间】:2019-12-23 06:43:48
【问题描述】:
我已经看到这种行为被解释了,因为它通常是 finally 块中的不可变字符串,但我不明白为什么 int 原语会以这种方式表现。
"i" 不是按值作为方法中的参数传递的。该方法是直接设置 i 类变量。这是显而易见的,因为在方法完成后打印时 i 的值会发生变化。
同样清楚的是,它在 try 块中的 return 语句之前已被更改,因为 finally 块中的 print 首先打印。
public class Test {
static int i = 0;
public static void main(String[] args) {
System.out.println("Try Block returns: " + methodReturningValue());
System.out.println("Value of i after method execution is " + i);
}
static int methodReturningValue()
{
try
{
i = 1;
System.out.println("try block is about to return with an i value of: "+ i);
return i;
}
catch (Exception e)
{
i = 2;
return i;
}
finally
{
i = 3;
System.out.println("Finally block: i has been changed to 3");
}
}
}
输出:
try block is about to return with an i value of: 1
Finally block: i has been changed to 3
Try Block returns: 1
Value of i after method execution is 3
【问题讨论】:
-
“我已经看到这种行为被解释了,因为它通常是一个不可变的字符串” 你在哪里看到过这种解释?这种解释根本没有意义。在 finally 中为字段或变量分配不同的值不会影响使用
return的返回值。 Java 是按值传递,而不是按引用传递。 -
传递了一些东西:返回值从方法中传递给调用者。但是,我认为您将在变量中重新分配新值与更改变量引用的对象的内容混淆了。
-
没错。评估顺序,而不是不变性等。
标签: java try-catch-finally finally