A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 维斯布里克 初级黑马   /  2017-2-26 22:27  /  810 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

byte,short,char---int---long---float---double
小类型四则运算默认提升为大类型
                int b=2;
                int d=4;
                int f=b+d;
                byte a=1;
                byte c=2;
                byte h=a+c;
(a+c)会默认为int,(b+d)会默认为long吗?
如果是那样,为啥(a+c)那个出错,(b+d)不报错
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端

5 个回复

倒序浏览
(a+c)默认int,(b+d)还是int。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
hongkexy 发表于 2017-2-26 22:48
(a+c)默认int,(b+d)还是int。

int不是就默认提升为long?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
hongkexy 发表于 2017-2-26 22:48
(a+c)默认int,(b+d)还是int。

那个还是只有byte.short,char.运算右边变为int,其他的变为右边中的大类型??
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
维斯布里克 发表于 2017-2-26 23:09
那个还是只有byte.short,char.运算右边变为int,其他的变为右边中的大类型??
...

除了前面三个会默认提升为int,其他的都是按最大提升。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
是这样,b+d没有报错,首先原因是两个都是int类型,如果这两个某一个是int类型的最大值,那么再加上一个数,就会“溢出”,然后输出会变成负数,第二个 因为声明的时候是byte类型,两个变量相加,编译器同样判断可能会超过127,比如a=126,c=2,是按照默认的int类型进行,然后在转为byte,所以编译器在判断的时候会提示可能会损失精度。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马