Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ++;我和我++;最后是{}_Java - Fatal编程技术网

Java ++;我和我++;最后是{}

Java ++;我和我++;最后是{},java,Java,这是我的第一篇帖子,我知道类似的东西也被贴了出来。。。。但我在理解某些东西时遇到了问题。我知道++I和I的区别++ ++i首先递增'i',然后返回'i'的值 i++递增“i”,并在递增之前返回值 我在工作面试中遇到了一个问题: “我的价值是什么?” 根据我上面写的,我认为应该是1。但在一些测试应用程序中检查后,我知道它是2。所以我的问题是:为什么 当我玩了一点并切换了++时,我和我++ int test(){ int i = 0; try { return ++i;

这是我的第一篇帖子,我知道类似的东西也被贴了出来。。。。但我在理解某些东西时遇到了问题。我知道++I和I的区别++

  • ++i首先递增'i',然后返回'i'的值
  • i++递增“i”,并在递增之前返回值
  • 我在工作面试中遇到了一个问题: “我的价值是什么?”

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

    当我玩了一点并切换了++时,我和我++

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

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

    当始终执行的finally块包含return语句时,该方法返回finally块返回的任何内容

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

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


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

    正确。finally会覆盖try块
    int test(){
       int i = 0;
       try {
        return ++i; 
       } finally {
        return i++;
       }
    }