【问题标题】:The result of try catch finally in java [duplicate]java中try catch finally的结果[重复]
【发布时间】:2013-10-14 19:16:35
【问题描述】:

我得到了一个 try catch finally java 问题。代码是这样的:

package com.test;

public class TestExamples {

public int testFinally(int inputNum) {
    int returnNumber = inputNum;
    try {
        returnNumber++;
        return returnNumber;

    } finally {
        returnNumber++;

    }
}

public StringBuilder testFinallyString() {
    StringBuilder builder = new StringBuilder();
    try {
        builder.append("cool");
        return builder.append("try");

    } finally {
        builder.append("finally");
    }
}


public static void main(String[] args) {
    TestExamples testExamples = new TestExamples();
    System.out.println("The result of testFinally is " + testExamples.testFinally(5));
    System.out.println("The test of testFinallyString is " + testExamples.testFinallyString());

}

    }

结果:

testFinally 的结果是 6
testFinallyString 的测试是cooltryfinally

如果 finally 每次都执行,那为什么 testFinally 是 6?我有点困惑,最终代码块不会导致返回的数字增加。 请有人能更清楚地说明根本原因是什么。

【问题讨论】:

  • 引用类型和原语。

标签: java


【解决方案1】:

我认为这是因为 return returnNumber; 是在 finally 块之前计算的。此时,returnNumber 为 6。然后执行 finally 块,并将 returnNumber 递增到 7,但到那时为时已晚——testFinally 已经决定返回 6。

【讨论】:

  • 这没有回答问题,只是概述了观察结果(很糟糕,因为没有与字符串生成器进行比较)
【解决方案2】:

如果每次都执行finally,那为什么testFinally是6?

增量正在发生,但它是在您返回原始值之后发生的。你返回的不是一个对象

【讨论】:

  • 我认为这与原语的关系不如与重新分配的关系一样大。复合运算符执行x = x + y,因此如果您已经返回x,那么没有人会看到重新分配。 Object 也是如此。
猜你喜欢
  • 2011-10-31
  • 2015-09-05
  • 2011-11-17
  • 2013-02-19
  • 2016-03-28
  • 1970-01-01
  • 2011-06-01
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多