关于java中byte a=1;的问题

上述的语句是合法的,我们可以把一个整数常量1赋给byte类型的变量a,这是上述语句是合法的,但是java不允许floata=1.0;这样的形式,因为浮点数默认以doubl... 上述的语句是合法的,我们可以把一个整数常量1赋给byte类型的变量a,这是上述语句是合法的,但是java不允许float a=1.0;这样的形式,因为浮点数默认以double存储,所以不能直接赋值给float。但是这跟上例特点完全一样,但却一个合法,一个不合法。这是为什么呢? 展开
 我来答
静听_一角
推荐于2016-01-05
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
可以这么说byte是int的子集,byte表示范围是-128-127;在这个范围内可以用整形常量(注意一定是整形常量不是整形变量)复制给byte类型的,这样做的目的就是为了节约更多的资源。
更多追问追答
追问
那么就是说float不是double的子集??这好像不对吧?
追答
float和double涉及到精度问题,5.0和5.00精确度你能说5.0是5.00的子集吗
悠嘻猴在唱歌
2014-01-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
因为1是常量,并且没有超过byte的范围,所以编译通过,假如换成变量就不行,因为变量值是不确定的,所以可能会超过byte的范围,所以编译通过不。
你改成 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型,已确定不会有损失精度的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帛晗0hz
2014-01-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
在计算机存储中,int类型可以转换成byte,是因为计算机对int类型处理只需要进行截断处理,但是double类型就有点烦了,你可以去查一下浮点数规格化处理,这方面我也不是很了解。
这方面的知识就涉及到了计算机组成原理了,如果有兴趣可以深入的探究,以后在开发中没时间纠结这些问题了
追问
您好,感谢您的回答,对我很有帮助。但是只能采纳一个答案,所以………祝您新年快乐~>_<~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶落归根24
2014-01-20
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
float a=1.0f;
这样就合法了
更多追问追答
追问
我知道但是您并没有回答我的问题。
我知道但是您并没有回答我的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
?>

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式