为什么我不能增加返回值?

gst*_*low 0 java increment return-value

我注意到惊讶的行为:

可以写:

Integer integer = 0;
integer++;
Run Code Online (Sandbox Code Playgroud)

但我不能这样写:

getInteger()++;
Run Code Online (Sandbox Code Playgroud)

如果

public static Integer getInteger(){
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

对我来说,两个片段看起来一样.

但第二个片段产生:

unexpected type
        getInteger()++;
                  ^
  required: variable
  found:    value
Run Code Online (Sandbox Code Playgroud)

为什么第二种结构是禁止的?

通常在代码中我被迫编写像这样丑陋的结构:

obj.set(obj.get()+1);
Run Code Online (Sandbox Code Playgroud)

它看起来多余.

Fre*_*Foo 7

x++是不一样的x + 1.它的缩写x += 1,即x = x + 1; 增量,然后分配.所以getInteger()++意味着getInteger() = getInteger() + 1,没有任何意义.您将一个值添加到一个值,而不是递增变量.

除此之外,++工作int但不是Integer,但即使你回来了,int你不能增加它++:

class Test {
    static public void main() {
        getint()++;
    }
    static int getint() {
        int a = 0;
        return a;
    }
}
Run Code Online (Sandbox Code Playgroud)

Test.java:3: error: unexpected type
        getint()++;
              ^
  required: variable
  found:    value
Run Code Online (Sandbox Code Playgroud)

(在C++中,您可以使用引用来完成此工作,但Java没有这些.)

  • @Zhuinden这是我最初的争论,但正如彼得指出的那样,使用自动拳击可以使用它.真正的问题只是函数的结果是_value_而不是_lvalue_ (2认同)