gpt4 book ai didi

java - Java 程序中单行中的多个类型转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:56:22 27 4
gpt4 key购买 nike

今天在搞Java语法的时候,试着编译了如下一段java代码:

class Mess {
public static void main(String[] args) {
float i = (char)(int)(long)(byte) 100;
System.out.println(i);
}
}

代码实际上没有编译或运行时错误。将 i 的数据类型更改为任何其他数据类型,如 intdoublechar 也有效。不仅如此,在声明中引入操作也没有任何错误:

float i = (char)+(int)-(long)(byte) 100;

当我在Netbeans中使用auto-format格式化代码时,上面的声明格式化如下:

float i = (char) +(int) -(long) (byte) 100;

请帮助我理解这段代码是如何编译的?

最佳答案

它基本上只是一串强制转换和一元 +-

float i = (char) +(int) -(long) (byte) 100;

相当于

byte tmp1 = (byte) 100;
long tmp2 = (long) tmp1;
long tmp3 = -tmp2;
int tmp4 = (int) tmp3;
int tmp5 = +tmp4;
char tmp6 = tmp5;
float i = tmp6;

最后的赋值是从charfloat,这是一个扩大的原始转换。参见 JLS Chapter 5: Conversions and Promotions

19 specific conversions on primitive types are called the widening primitive conversions:

  • byte to short, int, long, float, or double
  • short to int, long, float, or double
  • char to int, long, float, or double
  • int to long, float, or double
  • long to float or double
  • float to double

关于java - Java 程序中单行中的多个类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29986181/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com