2017-04-18 97 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),这个值将被格式化为一个数字,而不是一个字符......)

(注意:上面的代码有问题,我用它来说明链式类型转换是有时有用的事情。)