Blu*_*ell 60 java post-increment
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;
}
Run Code Online (Sandbox Code Playgroud)
它们都是int的,B&C为什么不编译?是否与++运营商的不同之处有关= 0 + 1;?
操作的参数无效++/ -
xle*_*ier 148
i++是对变量的赋值i.
在你的情况下,zero++是相当于zero = zero + 1.所以0++意味着0 = 0 + 1,这没有任何意义,以及getInt() = getInt() + 1.
更精确地 :
int oneA = zero++;
Run Code Online (Sandbox Code Playgroud)
手段
int oneA = zero;
zero = zero + 1; // OK, oneA == 0, zero == 1
Run Code Online (Sandbox Code Playgroud)
int oneB = 0++;
Run Code Online (Sandbox Code Playgroud)
手段
int oneB = 0;
0 = 0 + 1; // wrong, can't assign value to a value.
Run Code Online (Sandbox Code Playgroud)
int oneC = getInt()++;
Run Code Online (Sandbox Code Playgroud)
手段
int oneC = getInt();
getInt() = getInt() + 1; // wrong, can't assign value to a method return value.
Run Code Online (Sandbox Code Playgroud)
从更一般的角度来看,变量是L值,意味着它指的是存储位置,因此可以被赋值.L值中的L代表赋值运算符的左侧(即=),即使可以在赋值运算符的左侧或右侧找到L值(x = y例如).
相反的是R值(R代表赋值运算符的右侧).R值只能在赋值语句的右侧使用,以便为L值赋值.通常,R值是文字(数字,字符串......)和方法.
Apu*_*urv 14
getInt() 不是 int
getInt() 回报 int
++运营商做两件事increment+assignment
因此,对于++操作员来说,您需要一个变量来存储增量操作的结果,0而getInt()两者都不是.
j.k*_*son 10
前置和后置运算符仅在调用变量或左值时运行.左值是左值的缩写,即在赋值中可以站在左边的东西.在你的例子中:
zero = 1; // OK
0 = 1; // Meaningless
getInt() = 1; // Also meaningless
Run Code Online (Sandbox Code Playgroud)
// JK