void setStatus(Byte status){ } setStatus(1);
报错,不能接受int类型的值
<p>整型 int 数据的取值范围:[-2147483648,2147483647]<br> 字节型 byte 数据的取值范围:[-128,127]<br> 方法 static void setStatus(Byte status)需要字节型 byte 的参数。<br> 1 表示(默认)整型数据。(byte) 1 则表示字节型的数据。 因此,调用此方法的整型参数(比如 1),必须表明(转换)成字节型参数((byte)1),</p>
public class T {
static void setStatus(Byte status){
System.out.println("状态: " + status);
}
public static void main(String args[]){
System.out.println("整型[" + Integer.MIN_VALUE + "," + Integer.MAX_VALUE + "]");
System.out.println("字节型[" + Byte.MIN_VALUE + "," + Byte.MAX_VALUE + "]");
setStatus((byte)1);
}
}
输出:
整型[-2147483648,2147483647]
字节型[-128,127]
状态: 1
真假?
<p>(yte)1</p>
回复 <a class="referer" target="_blank">@水表</a> : 哈哈,我的锅
少打一个b,看了一会我寻思java里好像没有yte这个型啊。
<p>卧槽。。。赶紧给Oracle提交这BUG。</p>
<p>卧槽。。。赶紧给Oracle提交这BUG。</p>
<p>转成int 家static</p>
<pre>setStatus(11B);</pre>
这样不行么?
<p>当然不行啊 int的范围比byte大</p>
如果传入的int值不在byte的[-128,127]范围内 是有问题的
所以不能接收是合理的
同理 short也不能接收int int不能接收long一样
<p>java里面 数字 默认就是整型,如果赋值给long会自动转型会long,但是赋值给比int小的 都会报错。一个道理,float a=1.1也会报错。因为小数默认就是double类型。</p>
<p>你去看看C/C++的隐式类型转换就明白为什么 Java的byte不支持int赋值了</p>
<p>楼上的朋友说得都很对,但是这些答案都是片面的。</p>
真正的原因是原因。1是字面量。字面量是有自己的类型声明的。
很多人有这样的误解:int i=0;以为int 是定义了右边零的类型,其实是错误的。
而这里0不加任何后缀的时候是整型,然后左边的变量名i也是整型所以不会溢出。
而如果把左边的改成byte i =0 这时是则是可能会溢出,当然一般语言会作隐式数据转换
注意这里右边的0的长度是int型,在java里面没有在jre底层处理
隐式转换所以楼主会有这样的误会。
正确的做法是byte i = (byte)0;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。