2012-04-25 71 views
1

我現在的儲蓄,當我試圖編譯它後嘗試一些Java代碼這樣的數據類型字節不允許添加任何文字

class Test { 
public static void main (String [] args){ 
    byte b = 10; 
    b = b + 10; 
} 

}

,它給我一個錯誤

D:\java\Test.java:4: possible loss of precision 

found:int required:byte b = b + 10; ^ 1錯誤

但是沒有如果嘗試這樣的事情

b++; 
b+=10; 

這是完全正常的 是什麼原因?

+2

[why byte + = 1 compile but byte = byte + 1 not?]的可能重複(http://stackoverflow.com/questions/4969339/why-byte-1-compile-but-byte-byte-1 - 不) – axtavt 2012-04-25 07:36:19

+0

這只是一個近似重複的這個問題。另一個問題是「什麼在Java語言定義導致這種行爲?」,而這個問題是「這種行爲的原因是什麼」,要求動機的語言定義。 – 2012-04-25 07:42:51

回答

2

你必須寫你的原始代碼

b = (byte)(b + 10); 

的問題是,b + 10是int類型的,因爲字節被擴大爲int。

其原因是,如果b是120,那麼存在概念上的歧義。那麼b + 10等於130還是等於-126?

Java設計者決定在這種情況下應該在int中執行加法,所以120 + 10是130.然後它不能被存儲到一個字節中。

對於b+=10,很明顯你想修改b,所以它是一個字節的加法。

1

那麼它說:possible loss of precision因爲編譯器認爲可能會增加10至b後,可能byte大小的限制去了,但是當你使用b++b+=10它不是只是增加10typcasting它會自動如此以在編譯器級確認b的值不超出byte大小的限制。

相關問題