gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:21:36 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com