为什么一元运算符不能直接在Java中的值上运行?

rof*_*ggo 1 java unary-operator

不是我想要的,但我想知道为什么一元运算符不能直接处理Java中的值?

为什么result++;工作int result = 0;result = 0++;不工作?

我能找到的docs只是一元运算符只需要一个operand,但是对于一个操作数没有明确的定义,它似乎可以是变量或值.

Jon*_*eet 8

并不是一元运算符不起作用 - 例如 - (+( - 5))没问题.

++不只是计算一个值 - 它的目的是增加一个变量.0不是变量.

JLS 15.14.2(后缀增量运算符++)

后缀表达式的结果必须是可转换(§5.1.8)到数字类型的类型的变量,否则会发生编译时错误.

请注意,这不仅仅是文字.你做不到:

String x = "foo";
x.length()++; // wrong!
Run Code Online (Sandbox Code Playgroud)

因为再次,x.length()不被归类为变量.

但是你可以使用其他一元运算符,例如

String x = "foo";
int y = -x.length(); // Unary - operator... that's fine
Run Code Online (Sandbox Code Playgroud)