2013-05-16 209 views
0

我碰到這個代碼爲什麼這個Java代碼編譯

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如何是一個合法的整數

+1

我不認爲你可以編譯這個。您需要將'someint = -0;'括在花括號中 – hoaz

+0

對代碼塊使用一致的邏輯縮進。代碼的縮進旨在幫助人們理解程序流程。 –

+0

由於'someint = -0'必須位於大括號'{}'之間的代碼塊內,因此原樣編碼將永遠不會編譯。 –

回答

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以符合該語言。

0

減0是色慾像0,並且編譯器假設someint = 0

6

因爲「 - 」是一元否定運算符並且適用於所有數字,包括0,即使它不影響全部是。

BNF規則的Java:

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

有趣-0.0相同數量的0.0

+0

儘管如此,這段代碼並不是按原樣編譯的。 –

+0

@LuiggiMendoza - 我認爲它回答了OP想要問的問題。 – OldCurmudgeon

+0

現在OP已經修復了代碼,它確實如此。 –

0

也許你的意思是這樣:

private int someint; 

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

爲什麼這不應該被編譯?一元運算-適用於所有數字常量。對於值0它不會更改其符號。

你的輸出如何?它不能在最新版本的JVM(Java 1.7_17)下重現。它只打印出0

+0

我得到-0作爲我的輸出 –

+0

@ System.Object可能是您使用的版本是越野車? –

+0

它是我重新安裝,現在它打印0謝謝反正 –