【问题标题】:Java diference between ++i and i++ with finally{} [duplicate]++i和i++与finally{}之间的Java区别[重复]
【发布时间】:2019-03-15 02:01:04
【问题描述】:

这是我的第一篇文章,我知道发布了类似的内容....但我在理解某些内容时遇到了问题。我知道 ++i 和 i++ 的区别

  1. ++i 首先增加'i'然后返回'i'的值
  2. i++ 递增 'i' 并在递增之前返回值

我有一个关于求职面试的问题: "i 的值是多少"

int test(){
   int i = 0;
   try {
    return i++; 
   } finally {
    return ++i;
   }
}

根据我上面写的,我认为它应该是 1。但是在一些测试应用程序中检查后我知道它是 2。所以我的问题是:为什么?

当我用它玩了一点并用 i++ 切换 ++i 时

int test(){
   int i = 0;
   try {
    return ++i; 
   } finally {
    return i++;
   }
}

在这种情况下,i 的值是预期的 1。那为什么呢?

【问题讨论】:

    标签: java


    【解决方案1】:

    当总是被执行的 finally 块包含一个 return 语句时,该方法返回 finally 块返回的任何内容。

    因此,在第一种情况下,try 块中的 return i++i 递增到 1 但不返回它,而 finally 块中的 return ++ii 递增到 2 并返回递增的值值(因为它是一个预增量运算符)。

    如果交换运算符,try 块中的 return ++ii 递增到 1 但不返回它,而 finally 块中的 return i++i 递增到 2 但返回之前的值到那个增量 - 1(因为它是一个后增量运算符)。

    换句话说,返回值不取决于 try 块是包含++i 还是i++。它只取决于 finally 块是否包含 ++ii++

    【讨论】:

    • 没错。最后在这里覆盖try块
    猜你喜欢
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2023-03-29
    • 2020-02-26
    • 2019-02-28
    • 2023-01-25
    相关资源
    最近更新 更多