2012-07-17 30 views
13

我想知道爲什麼我們可以這樣做:的Java實例Short對象在Java中

Long l = 2L; 
Float f = 2f; 
Double d = 2d; 

甚至

Double d = new Double(2); 

,而不是

Short s = 2s; //or whatever letter it could be 

也不

Short s = new Short(2); //I know in this case 2 is an int but couldn't it be casted internally or something? 

爲什麼我們需要使用String或Short來構造函數。

+3

沒有短也不字節文字中Java的。 – 2012-07-17 16:06:36

+0

@ Eng.Fouad是正確的。 0xFF是java中的一個int,「>>和<<運算符取和返回整數,短和字節只剩下一點。不知道爲什麼。 – lynks 2012-07-17 16:08:19

回答

2

Java中的一個主要規則是任何數學運算的結果都將存儲在一個大尺寸變量中以避免截斷。例如,如果您將long與long相加,結果會很長。因此,對字節,字符或短的任何操作都會導致int,即使您將1加到一個字節中。有兩種方法可將結果存儲在相同的數據類型中:

a)您做顯式轉換:

short s=10; 
s=(short)(s+1); 

b)你可以用短手操作的自動遞增問JVM做隱式轉換:

short s=10; 
s+=21; 

OR

short s=10; 
s++; 

如果需要短期或字節的文字,因爲有像Ss沒有後綴short它們必須鑄造:

byte foo = (byte)100000; 
short bar = (short)100000; 
+0

即使添加兩個'short'或'byte'或'char's將導致一個'int'。雖然添加兩個'int'不會導致'long'。 'int'在這裏很特別。這是'DataOutput#writeShort'接受一個int參數而不是簡短的另一個原因。 – mihi 2012-07-17 16:32:02

11

但是你可以做到這一點:

Short s = 2; 

或者這個:

Short s = new Short((short)2); 

或者這樣:

Short s = new Short("2"); 

上述任何將工作,只要該數量是在範圍[-2^15,2^15-1]

+0

其實你不能做Short s = new Short((short)2);無論是那個還是我的月食都是錯誤的。你需要使用short short = 2;而不是在構造函數上使用它。 – 2012-07-17 16:22:51

+3

@NunoGonçalves它在我的Eclipse中工作 – 2012-07-17 16:24:27

+0

啊,我的壞,我做錯了......:/ – 2012-07-17 16:27:23