为什么char类型的递增操作符并非总是有效?

3

为什么这个会起作用:

char c = 5;
int i = c++;

但是这会抛出编译器错误(++/--操作符的参数无效):
int i = argv[0].charAt(0)++;
3个回答

11

++ 运算符作用于变量和返回可写引用的表达式,而不是一般的所有值。换句话说,没有办法将递增后的 char 值写回到原始字符串中,因此 charAt(0)++ 会导致错误。

可以通过将 argv[0] 转换为字符数组,并递增该数组中的值来解决这个问题。


啊,我以为如果是一个值而不是一个变量,它就会跳过写入。 - David says Reinstate Monica
2
Java 假设如果您不想写入,您会写 x 而不是 x++,因为表达式求值的值将是相同的。 - Sergey Kalinichenko

8

增量运算符只能应用于lvalues,这意味着表达式的计算结果可以出现在赋值表达式的左侧。函数的返回值不是lvalue

你的charAt(0)调用和底层char[]中读取该字符值的位置之间没有任何关联。如果你有

argv[0].value[0]++;

这样做是可行的,但是value是什么意思?

private final char[] value;

在不可变的String类中。

2
简单来说:它需要一个变量。这不是一个变量 argv[0].charAt(0),而是一个方法调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接