我遇到了这段代码
public class Main {
static int someint;
public static void main(String[] args) {
someint = -0;
print();
}
private static int print()
{
System.out.println(someint);
return someint;
}
}
当我运行时打印-0
我只是想知道-0是一个合法的整数值
答案 0 :(得分:6)
因为“ - ”是一个monadic否定运算符,并且适用于所有数字,包括0
,即使它根本不会影响0
。
请参阅BNF Java规则:
numeric_expression =
( ( "-"
/ "++"
/ "--" )
expression ) ...
有趣的是,-0.0
与0.0
的数字相同
答案 1 :(得分:5)
JLS #15.15.4明确表示:
对于整数值,否定与从零减去相同。
因此int i = -0;
相当于int i = 0 - 0;
,相当于int i = 0;
。
请注意,浮点值不是这样的:
对于浮点值,否定与从零减法不同,因为如果x为+0.0,则0.0-x为+0.0,但-x为-0.0。
因此,您的代码必须打印0
以符合该语言。
答案 2 :(得分:0)
减0就像0一样,编译器假定someint = 0
答案 3 :(得分:0)
可能你的意思是这样的:
private int someint;
private int print()
{
someint = -0;
System.out.println(someint);
return someint;
}
为什么不应该编译?一元操作-
对所有数字常量都有效。对于值0
,它不会更改其符号。
你的输出怎么样 - 它在JVM的最新版本(Java 1.7_17)下是不可重现的。它打印出0
。