java中byte是8为,short是16位,为什么我在给他们赋值的时候IDE会报错,int和long却没有问题?
<pre><code>A.java:7: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b1 = 0xAA; ^ A.java:9: 错误: 不兼容的类型: 从int转换到short可能会有损失 short s1 = 0xAAAA; ^ 2 个错误
编译时候,进行检查,看赋值大小是否超过变量的类型所容纳的范围。
如果超过,报错:从int转换到byte可能会有损失,
如果没超过,编译通过
变量的类型 | 该变量类型所容纳的范围 ( MAX_VALUE 十进制) | 初始值( 10 进制) | 初始值( 16进制) |
byte | 127 | 170 | 0xAA |
short | 32767 | 43690 | 0xAAAA |
int | 2147483647 | 2863315899 | 0xAAAABBBB |
long | 9223372036854775807 | 12297848147757817309 | 0xAAAABBBBCCCCDDDDL |
A.java:6: 错误: 过大的整数: 2863315899
int i= 2863315899;
^
1 个错误
回复 <a class="referer" target="_blank">@pinitianjie</a> : 值得深思/详谈。
编译器不对超限的int和long进行检查,这个是为什么
<p>Java 中都是有符号数。最高位表示正/符,其余位是有效位。最高位是1时,要以补码进行计算</p>
贴一个JLS 中的英文:
An integer literal is of type long if it is suffixed with an ASCII letter L or l (ell);
otherwise it is of type int.
int i = 0XAAAABBBB;
byte b = 0XA;
short s = 0XAAA; 正常
0XAA 十进制为170,大于byte的最大值127
0XAAAA 被认为是int值,且大于了short的最大值32767,不能赋值为short。
long 是64位且声明了该16进制数为long型,且最高位为1进行逆补码运算后结果为-6148895925951734307
这错误鼠标悬浮应该会告诉你吧
<p>你连基本类型的最大值和最小值都不知道,建议</p>
大佬请讲解一下。定义一个short类型字段,怎么set值给他
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。