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

Dav*_*ica 3 java string int char

为什么这样做:

char c = 5;
int i = c++;
Run Code Online (Sandbox Code Playgroud)

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

int i = argv[0].charAt(0)++;
Run Code Online (Sandbox Code Playgroud)

das*_*ght 11

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

您可以通过转换argv[0]为字符数组并在该数组内增加值来解决此问题.

  • @ Dgrin91 Java假设如果你不想写,你会写`x`而不是`x ++`,因为表达式求值的值是相同的. (2认同)

Mar*_*nik 8

增量操作者可以仅被施加到左值,这意味着该评估的是可在赋值表达式的左侧出现的东西表达式.函数的返回值不是左值.

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

argv[0].value[0]++;
Run Code Online (Sandbox Code Playgroud)

将工作,但value

private final char[] value;
Run Code Online (Sandbox Code Playgroud)

不可变的 String类中.