2017-04-18 93 views
0

我碰到一個代碼片段在Java中走到今天,如下:什麼是Java的多類型轉換的目的是什麼?

long longValue = 100; 
byte b = (byte)(short)(int)longValue; 
byte byteValue = 100; 
long l = (long)(int)(short)byteValue; 
System.out.println(b+l); 

是什麼類型的鑄造多次,從int到短字節的目的,以及短期爲int長?請問這有什麼區別,如果我直接從長轉換爲字節或反之亦然?

上面的代碼沒有任何區別,即使沒有明確的類型轉換!

回答

4

從int到short到byte,從short到int到long到多長時間的類型轉換的目的是什麼?

沒有什麼目的。期。

byte b = (byte)(short)(int) longValue; 
long l = (long)(int)(short) byteValue; 

是100%等同於:

byte b = (byte) longValue; 
long l = byteValue; 

在你的問題中的代碼可能是下列之一:

  • ,該代碼的作者沒有按指示「T理解Java,
  • 測試......,看看>>你< <理解Java,單元測試的
  • 部分的Java編譯器或類似的,或通過一些工具,人類不應該需要閱讀是產生
  • 代碼和編譯器會興高采烈地優化。

有一個或兩個的情況下類型轉換的鏈實際上是有用的。這裏是一個:

int ch = ... 
System.out.println("char is '" + (char)(byte) ch + "'"); 

這裏,(byte)變窄int到一個8位帶符號的值,然後將(char)變寬到一個16比特的無符號值。然後+運算符會導致Character.toString(char)用於將該值轉換爲字符串。 (如果你忽略了(char),這個值將被格式化爲一個數字,而不是一個字符......)

(注意:上面的代碼有問題,我用它來說明鏈式類型轉換是有時有用的事情。)