为什么不总是增加操作员对字符的工作?

时间:2014-04-07 14:44:50

标签: java string char int

为什么这样做:

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

但这会引发编译器错误(无效参数到Operator ++ / - ):

int i = argv[0].charAt(0)++;

3 个答案:

答案 0 :(得分:11)

++运算符处理变量和表达式,返回对可写事物的引用,而不是一般所有值。换句话说,根本没有办法将递增的char的值写回原始字符串,因此charAt(0)++是错误。

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

答案 1 :(得分:8)

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

您的charAt(0)调用与基础char[]中从此char值读取的位置之间没有任何关联。如果你有

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

可行,但value

private final char[] value;
in immutable String类中的

答案 2 :(得分:2)

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