2015-08-19 37 views
0

我有以下代码:的Java:字节投问题

byte b=10; 
System.out.println("Test b:"+b); 

该代码被编译,没有问题的作品。但是,我不明白为什么。 10在这里是文字,它是整数文字(默认为整数)。所以我们在这里铸造左边的字节,右边的是整数。而这正在缩小为byte<integer。据我了解,缩小必须始终显式转换,否则代码将无法编译。任何人都可以解释为什么这段代码有效

+0

'长×= 1;'这个编译过。但'int x = 100000000000000;'不会 –

+2

[Here](http://stackoverflow.com/a/12419618/1343161)是一个很好的解释。 – Keppil

回答

4

它有效,因为10是一个编译时常量。编译器可以推断出它适合byte范围,因此它允许分配。

你可以玩变量赋值。比如你做

byte b = 128; 

,那么你会得到一个编译错误,因为128不适合byte范围。在这种情况下,你可以做一个投:

byte b = (byte) 128; 

但后来你会溢出结束和b将进行评估,以-128

+0

那你能解释为什么float f = 23.22不起作用吗? 23.22也适合浮点范围... –

+0

浮点值是其他内容 - 检出[JLS](https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls -4.2.3) –

0

byte的最大值是127

10适合字节,因此它是一个有效的分配。

尝试

byte b = 140; //it wont