java - 为什么后自增运算符不适用于返回 int 的方法?

标签 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;
}

都是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/

相关文章:

java - 从 Java 读取条形码

Java - 如何检查数据库中的现有用户(用于注册界面)?

java - 将 printStackTrace() 用于 caugt 异常是一个坏主意吗?

java - Testng:并行测试问题

javascript - 为什么具有预增量的 for 循环与具有后增量的循环具有相同的行为?

c - C 中的数组和增量运算符?

java - 由 : java. sql.SQLException : Connection is not associated with a managed connection. org.jboss.resource.ada 引起

c - 如果 a 的值为 5,a++ + a 的值是多少?

使用带后增量的指针复制字符

C# 后增量