我已经阅读了该站点上有关类型转换的大多数线程(请不要再链接到我或将其标记为重复),并希望对其中一些特定情况进行解释。

1)

char x='a';
char y = 'b';


在这种情况下,我们不允许这样做

char z = x + y; \\case 1a


但是我们可以做

char z='a'+'b'; \\ case 1b


我在该站点上阅读到,两个字符的加法会导致一个整数,这就是为什么我们不能做1a,但是如果这样做,为什么我们可以做1b。

2)

为什么允许

byte byteVar = 42;


文字42是一个整数,因此即使42在字节范围内,为什么我们也允许将其存储在一个字节中而不进行转换。如果能够做到这一点,为什么不能做到1a。

3)
以下返回true

System.out.println(6.0000000000000000000000000000000001 == 6.0);


RHS被视为字面量的两倍。我猜LHS也被当作字面量的两倍,但它绝对超出了两倍的精度。为什么不引发错误,以及如何比较这两件事。

我将不胜感激对此的任何指导。谢谢。

最佳答案

前两个由相同的情况处理-JLS section 5.2


  此外,如果该表达式是类型为byte,shortcharint的常量表达式(第15.28节):
  
  
  如果变量的类型为byteshortchar,并且常量表达式的值可以表示为变量的类型,则可以使用变窄的原始转换。
  


第三个只是从源代码中的文字到double的常规转换的情况:精确到double精确到6.0000000000000000000000000000000001的是6.0。因此,如果您有:

double d = 6.0000000000000000000000000000000001;


将为d分配6.0的值,因为这是与源代码中指定的值最接近的double可表示。

07-26 09:28
查看更多