为什么这个会起作用:
char c = 5;
int i = c++;
但是这会抛出编译器错误(++/--操作符的参数无效):
int i = argv[0].charAt(0)++;
++
运算符作用于变量和返回可写引用的表达式,而不是一般的所有值。换句话说,没有办法将递增后的 char
值写回到原始字符串中,因此 charAt(0)++
会导致错误。
可以通过将 argv[0]
转换为字符数组,并递增该数组中的值来解决这个问题。
增量运算符只能应用于lvalues,这意味着表达式的计算结果可以出现在赋值表达式的左侧。函数的返回值不是lvalue。
你的charAt(0)
调用和底层char[]
中读取该字符值的位置之间没有任何关联。如果你有
argv[0].value[0]++;
这样做是可行的,但是value
是什么意思?
private final char[] value;
argv[0].charAt(0)
,而是一个方法调用。
x
而不是x++
,因为表达式求值的值将是相同的。 - Sergey Kalinichenko