0

私はこのコードに出くわしました

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 がどのように有効な整数値であるかについて、私はちょうど興味がありました

4

4 に答える 4

6

「-」は単項否定演算子であり、0まったく影響しない場合でも、すべての数値で機能するため0です。

Java のBNFルールを参照してください。

numeric_expression  = 
 (  (  "-" 
 /  "++" 
 /  "--"  ) 
expression ) ...

興味深いことに、 はと同じ数で-0.0はありません0.0

于 2013-05-16T14:30:43.230 に答える
5

JLS #15.15.4は、明示的に次のように述べています。

整数値の場合、否定はゼロからの減算と同じです。

soint i = -0;は と同等で、int i = 0 - 0;which は と同等int i = 0;です。

浮動小数点値には当てはまらないことに注意してください。

浮動小数点値の場合、x が +0.0 の場合、0.0-x は +0.0 ですが、-x は -0.0 であるため、否定はゼロからの減算と同じではありません。

したがって、コード0は言語に準拠して印刷する必要があります。

于 2013-05-16T14:40:56.877 に答える
0

マイナス 0 は 0 のような欲望であり、コンパイラは someint = 0 を想定します。

于 2013-05-16T14:30:04.370 に答える
0

おそらく、次のような意味です。

private int someint;

private int print()
{
    someint = -0;
    System.out.println(someint);
    return someint;
}

なぜこれをコンパイルしてはいけないのですか? 単項演算-は、すべての数値定数に対して有効です。値の0場合、符号は変わりません。

出力はどうですか-JVMの最後のバージョン(Java 1.7_17)では再現できません。ちょうど印刷されます0

于 2013-05-16T14:30:50.100 に答える