关于java中byte a=1;的问题
上述的语句是合法的,我们可以把一个整数常量1赋给byte类型的变量a,这是上述语句是合法的,但是java不允许floata=1.0;这样的形式,因为浮点数默认以doubl...
上述的语句是合法的,我们可以把一个整数常量1赋给byte类型的变量a,这是上述语句是合法的,但是java不允许float a=1.0;这样的形式,因为浮点数默认以double存储,所以不能直接赋值给float。但是这跟上例特点完全一样,但却一个合法,一个不合法。这是为什么呢?
展开
4个回答
展开全部
因为1是常量,并且没有超过byte的范围,所以编译通过,假如换成变量就不行,因为变量值是不确定的,所以可能会超过byte的范围,所以编译通过不。
你改成 int a = 1; tyte b = a; 这样编译就通不过了
你改成 int a = 1; tyte b = a; 这样编译就通不过了
追问
那么同样的float a = 1.0呢,1.0也是常量,而且也没超过范围,但是却不合法。我知道浮点数默认以double存储,但是整数也同样默认以int存储啊,它为什么就可以付给byte呢?
追答
1.0默认是double类型小数点后面有15为0,float小数点后面是6为0,将1.0赋给float要切掉后面的0,会损失精度,所以不能通过编译 虽然后面是0 系统也把它当做小数位, 而常量转到tyte型,已确定不会有损失精度的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在计算机存储中,int类型可以转换成byte,是因为计算机对int类型处理只需要进行截断处理,但是double类型就有点烦了,你可以去查一下浮点数规格化处理,这方面我也不是很了解。
这方面的知识就涉及到了计算机组成原理了,如果有兴趣可以深入的探究,以后在开发中没时间纠结这些问题了
这方面的知识就涉及到了计算机组成原理了,如果有兴趣可以深入的探究,以后在开发中没时间纠结这些问题了
追问
您好,感谢您的回答,对我很有帮助。但是只能采纳一个答案,所以………祝您新年快乐~>_<~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
float a=1.0f;
这样就合法了
这样就合法了
更多追问追答
追问
我知道但是您并没有回答我的问题。
我知道但是您并没有回答我的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询