public void increment(){
int zero = 0;
int oneA = zero++; // Compiles
int oneB = 0++; // Doesn't compile
int oneC = getInt()++; // Doesn't compile
}
private int getInt(){
return 0;
}
都是int的,为什么B&C编译不出来?是否与 ++
运算符与 = 0 + 1;
不同的方式有关?
Invalid argument to operation ++/--
最佳答案
i++
是对变量 i
的赋值。
在您的情况下,zero++
等效于 zero = zero + 1
。所以 0++
将意味着 0 = 0 + 1
,这没有意义,以及 getInt() = getInt() + 1
.
更准确地说:
int oneA = zero++;
意思
int oneA = zero;
zero = zero + 1; // OK, oneA == 0, zero == 1
int oneB = 0++;
意思
int oneB = 0;
0 = 0 + 1; // wrong, can't assign value to a value.
int oneC = getInt()++;
意思
int oneC = getInt();
getInt() = getInt() + 1; // wrong, can't assign value to a method return value.
从更一般的角度来看,变量是一个L-value,意味着它指的是一个内存位置,因此可以被赋值。 L-value中的L代表赋值运算符的left侧(即=
),即使L-可以在赋值运算符的左侧或右侧找到值(例如 x = y
)。
相反的是R-value(R代表赋值运算符的right侧)。 R-values 只能用在赋值语句的右侧,将某些东西赋给 L-value。通常,R 值是文字(数字、字符串...)和方法。
关于java - 为什么后自增运算符不适用于返回 int 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291861/