java中的原始类型转换(令人不安的例子)

时间:2017-08-06 06:42:42

标签: java casting

我已阅读本网站上关于类型转换的大部分主题(请不要将我链接到任何其他内容或将其标记为副本),并希望对其中一些具体案例进行解释。

1)

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

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

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

但我们可以做到

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

我在这个网站上看到,添加两个字符会产生一个int,这就是为什么我们不能做1a,但如果是这样,为什么我们可以做1b。

2)

为什么允许这样做

byte byteVar = 42;

文字42是一个int,所以为什么我们允许将它存储在一个字节中而不进行转换,即使42在字节范围内。如果可以做到这一点,为什么不能做到。

3) 以下返回true

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

RHS被视为双字母。我猜测LHS也被视为文字双,但它绝对超过了双精度所允许的精度。为什么不抛出错误,比较两件事情。

我非常感谢任何指导。谢谢。

1 个答案:

答案 0 :(得分:1)

前两个由同一个案件处理 - JLS section 5.2

  

此外,如果表达式是字节类型shortcharint的常量表达式(第15.28节):

     
      
  • 如果变量的类型是byteshortchar,则可以使用缩小的基元转换,并且常量表达式的值可以在类型中表示。变量
  •   

第三种情况只是从源代码中的文字到double的常规转换:最接近的确切double到6.0000000000000000000000000000000001是6.0。所以如果你有:

double d = 6.0000000000000000000000000000000001;

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