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

Java 为什么我不能增加返回值?,java,return-value,increment,Java,Return Value,Increment,我注意到令人惊讶的行为: 我可以这样写: Integer integer = 0; integer++; getInteger()++; 但是我不能这样写: Integer integer = 0; integer++; getInteger()++; 如果 对我来说,两个片段看起来是一样的 但第二段代码会产生: unexpected type getInteger()++; ^ required: variable found

我注意到令人惊讶的行为:

我可以这样写:

Integer integer = 0;
integer++;
getInteger()++;
但是我不能这样写:

Integer integer = 0;
integer++;
getInteger()++;
如果

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

但第二段代码会产生:

unexpected type
        getInteger()++;
                  ^
  required: variable
  found:    value
为什么禁止二次施工

在代码中,我经常被迫写这样难看的结构:

obj.set(obj.get()+1);

它看起来冗余。

x++
x+1
不同。它是
x+=1
的缩写,即
x=x+1
;递增,然后分配。所以
getInteger()++
意味着
getInteger()=getInteger()+1
,这毫无意义。您正在向值中添加一个,而不是增加变量

除此之外,
++
int
有效,但对
整数不起作用,但即使返回
int
,也不能用
++
递增:

class Test {
    static public void main() {
        getint()++;
    }
    static int getint() {
        int a = 0;
        return a;
    }
}
给予


<>(在C++中,你可以用引用来完成这项工作,但是java没有这些。)

你没有返回<代码> int <代码>,你返回了<代码>整数< /Cord>对象。
Integer
类是不可变的,并且没有自己的
++
运算符

此外,
++
运算符要求其操作数为
左值
,即可赋值变量,而不是
getInteger()
的结果是后者

对于您的第一次测试:

Integer integer = 0; integer++;
Java的自动装箱允许使用
++
运算符,但这只是因为Java会自动将
整数
转换为
整数
,然后再转换回来,而且变量
整数
左值
。这或多或少相当于:

int tmp_int = integer.intValue();
int result = tmp_int++;
integer = Integer.getInteger(tmp_int);
(void)result;                      
result
-表达式的有效“值”不是
integer
,因为您使用了
++
的“增量后”版本,因此结果是
integer
在递增之前的值

为什么禁止二次施工

Integer
是不可变的,因此您无论如何都无法更改它
int
是可变的,但由于它只返回值的副本,因此也不起作用

e、 g

obj.set(obj.get()+1)

这也破坏了封装。我建议这样的方法

AtomicInteger i = new AtomicInteger(0);
i.incrementAndGet();
或者你也可以有自己的

i.incr();

8++没有意义,但是

int x=8;
x++;
有道理吗 因为x++的工作方式类似于
x+=1
,即
x=x+1

而且
8=8+1
是不可接受的。

正如它所说,它需要
+
运算符的变量<代码>++
增加存储在某个位置的值,因此增加的值现在存储在该位置。函数只返回一个,该值不是变量

正如拉胡尔在评论中提到的那样简单

//This works
x=5;
x++; //Now x=6 since x++ is equivalent to x=x+1;

//This doesn't work
5++; //this doesn't even make sense, trying to do 5=5+1??

//similarly, getNumber() is just a value that is returned, it is a value, not a variable
//So it is like the second case
//This doesn't work
getNumber()++; //Trying to do getNumber()=getNumber()+1; ??

不能执行常量++即5++。在您的方法中,您返回0;obj.get()+1和obj.get()+1有多大区别?您希望它做什么?转换为调用
setInteger(getInteger()+1)
?别忘了Java语言对getter和setter一无所知…@Alnitak Integer不知道,但Java 5.0+支持装箱。@PeterLawrey fair point about boxing-可能编译器无法在
getInteger()中装箱++
scenario
ETOOMANYLANGUAGESINMYHEAD
未为类型定义运算符
++
Integer@Zhuinden这是我最初的观点,但正如彼得所指出的,使用自动拳击是可能的。真正的问题很简单,函数的结果是一个值,而不是左值
//This works
x=5;
x++; //Now x=6 since x++ is equivalent to x=x+1;

//This doesn't work
5++; //this doesn't even make sense, trying to do 5=5+1??

//similarly, getNumber() is just a value that is returned, it is a value, not a variable
//So it is like the second case
//This doesn't work
getNumber()++; //Trying to do getNumber()=getNumber()+1; ??