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

时间:2015-10-04 08:31:54

标签: java unary-operator

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

如果result++; int result = 0;不起作用,result = 0++;为何有效?

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

1 个答案:

答案 0 :(得分:8)

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

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

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

  

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

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

String x = "foo";
x.length()++; // wrong!

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

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

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