2012-01-22 69 views
1

官方Java site我碰到這個線強調了數字文本

you cannot place underscores in the following places: 

    At the beginning or end of a number... 

此外,他們都給予了例子來

int x1 = _52;    // This is an identifier, not a numeric literal 

當我在我的代碼中使用它,它沒有給任何編譯時錯誤

long l = _23L;  

我們可以在開始時使用_嗎? 是什麼由

This is an identifier, not a numeric literal 

對不起意思是,如果它確實是一個愚蠢的問題,我還沒有從很久修訂的Java基礎知識。

編輯:
我使用Windows XP和Java 7

java version "1.7.0_02" 
Java(TM) SE Runtime Environment (build 1.7.0_02-b13) 
Java HotSpot(TM) Client VM (build 22.0-b10, mixed mode, sharing) 
+0

你使用什麼編譯器,以及在哪個操作系統?這確實會給編譯錯誤,但正如Rajendran T所指出的,不是類型錯誤,而是未知變量。 – mgibsonbr

+0

@mgibsonbr:請檢查我的編輯。 – xyz

回答

2

字面任何東西,你像代碼硬編碼:

int x = 10; 
String str = "hello"; 

在這個10hello是文字。

所以數字文字只是文字有數值。

標識符是給對象,類等的名稱,但不能keywords如int,布爾值,null等

所以在上面的例子中x, str and String是標識符。

邊注:您如何定義數值文字是從JDK 6到JDK 7的不同所以有問題的代碼將只運行JDK7

+0

這並沒有回答這個問題:「這是一個標識符,不是數字字面意思,」 「這意味着什麼」。 – Frederick

+1

通過標識符表示它是一個變量名稱。 – havexz

1

當我用它在我的代碼它沒有給出任何編譯時間的錯誤

long l = _23L;

這意味着你應該有一個長的變量名爲_23L某處。

+0

我沒有在我的代碼中的任何其他長變量。 – xyz

0

Java 7現在允許使用數字字面下劃線。

int i = 1_000_000; // readable. 
1

我認爲你需要重新檢查你的測試用例。

當我嘗試編譯這個時,出現這個錯誤,期望錯誤。

ariel-2:src boxcat$ javac scratch/misc/ScratchSO.java 
scratch/misc/ScratchSO.java:16: error: cannot find symbol 
     long l = _23L; 
       ^
    symbol: variable _23L 
    location: class ScratchSO 
1 error