java中多重类型转换的目的是什么?

0 java casting

今天在java中遇到一个代码片段,如下:

long longValue = 100;
byte b = (byte)(short)(int)longValue;
byte byteValue = 100;
long l = (long)(int)(short)byteValue;
System.out.println(b+l);
Run Code Online (Sandbox Code Playgroud)

多次类型转换的目的是什么,从 int 到 short 到 byte,从 short 到 int 到 long?如果我直接从 long 转换为 byte 或反之亦然,会有什么不同吗?

即使没有显式类型转换,上面的代码也没有任何区别!

Ste*_*n C 5

多次类型转换的目的是什么,从 int 到 short 到 byte,从 short 到 int 到 long?

没有目的。时期。

byte b = (byte)(short)(int) longValue;
long l = (long)(int)(short) byteValue;
Run Code Online (Sandbox Code Playgroud)

100% 相当于:

byte b = (byte) longValue;
long l = byteValue;
Run Code Online (Sandbox Code Playgroud)

您问题中的代码可能是以下之一:

  • 表明代码作者不了解 Java,
  • 一个测试……看看>>你<<是否理解Java,
  • Java 编译器或类似程序的单元测试的一部分,或
  • 由某种工具生成的代码,人类不需要阅读这些代码,编译器会兴高采烈地优化。

在一两种情况下,一系列类型转换实际上很有用。这是一个:

int ch = ...
System.out.println("char is '" + (char)(byte) ch + "'");
Run Code Online (Sandbox Code Playgroud)

在此,(byte) 缩小int一个8位有符号值,然后(char) 加宽到一个16比特的无符号值。然后+运算符导致Character.toString(char)用于将值转换为字符串。(如果省略(char),则该值将被格式化为数字,而不是字符...)

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