我有以下代码:的Java:字节投问题
byte b=10;
System.out.println("Test b:"+b);
该代码被编译,没有问题的作品。但是,我不明白为什么。 10在这里是文字,它是整数文字(默认为整数)。所以我们在这里铸造左边的字节,右边的是整数。而这正在缩小为byte<integer
。据我了解,缩小必须始终显式转换,否则代码将无法编译。任何人都可以解释为什么这段代码有效
我有以下代码:的Java:字节投问题
byte b=10;
System.out.println("Test b:"+b);
该代码被编译,没有问题的作品。但是,我不明白为什么。 10在这里是文字,它是整数文字(默认为整数)。所以我们在这里铸造左边的字节,右边的是整数。而这正在缩小为byte<integer
。据我了解,缩小必须始终显式转换,否则代码将无法编译。任何人都可以解释为什么这段代码有效
它有效,因为10
是一个编译时常量。编译器可以推断出它适合byte
范围,因此它允许分配。
你可以玩变量赋值。比如你做
byte b = 128;
,那么你会得到一个编译错误,因为128
不适合byte
范围。在这种情况下,你可以做一个投:
byte b = (byte) 128;
但后来你会溢出结束和b
将进行评估,以-128
。
那你能解释为什么float f = 23.22不起作用吗? 23.22也适合浮点范围... –
浮点值是其他内容 - 检出[JLS](https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls -4.2.3) –
byte
的最大值是127
。
10
适合字节,因此它是一个有效的分配。
尝试
byte b = 140; //it wont
'长×= 1;'这个编译过。但'int x = 100000000000000;'不会 –
[Here](http://stackoverflow.com/a/12419618/1343161)是一个很好的解释。 – Keppil