在finally块中将null指定给变量

这个问题在这里已经有了答案:

  • 最终总是在Java中执行? 50个答案

  • 基本上,Java所做的是以下内容:

    StringBuilder valueToReturn = builder.append("Passed!!!");
    executeFinallyBlock();
    return valueToReturn;
    

    无论你在finally块中做什么,Java都会保留对返回值的引用,并返回该引用。 所以它变成:

    StringBuilder valueToReturn = builder.append("Passed!!!");
    builder = null;
    return valueToReturn;
    

    答案很简单。

    Finally块将被肯定执行,因为你没有从它返回任何值, try块的返回值将被传递给原来的调用者

    try {
        builder.append("Test ");
        return builder.append("Passed!!!");
    } finally {
        builder = null; 
    }
    

    因此,你会得到“测试通过!!!”

    将代码更改为

    StringBuilder builder = new StringBuilder();
    try {
        builder.append("Test ");
        return builder.append("Passed!!!");
    } finally {
        return null;
    }
    

    如你所料,肯定会打印出“null”

    链接地址: http://www.djcxy.com/p/73711.html

    上一篇: Assigning null to variable in finally block

    下一篇: will this finally block execute?