要求我们使用int变量使答案等于20。我们只应更改加号和减号的位置。他们在整数a前面有一个减号。那会使int变成负数吗?
我已经搜索了答案,但是我的Googlefu没有达到标准。
public static int a = 1;
public static int b = 3;
public static int c = 9;
public static int d = 27;
public static void main(String[] args) {
int result = - a + b - c + d;
}
答案 0 :(得分:4)
在表达式中:
- a + b - c + d
共有3种不同的运算符,从左到右:
通常,一元运算符的优先级高于二元运算符,因此此表达式等效于:
(( (- a) + b) - c) + d
因此,一元-
适用于a
。根据上面的链接规范:
在运行时,一元减表达式的值是操作数提升值的算术求反。
因此,它不会使a
变为负数,它会导致表达式的值为a
的否定。这恰好是负数,因为a
具有正值。但是,它不会制作 a
,a
保持不变。
答案 1 :(得分:0)
真正使 为负数的唯一方法是重新分配它:
a = -a;
有关更详细的答案,请查看Java语言规范,在这里您可以找到有关如何在Java中对运算符和表达式求值的详细信息(在您的情况下为https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.15.4)