黑马程序员技术交流社区

标题: java类型转换问题 [打印本页]

作者: 维斯布里克    时间: 2017-2-26 22:27
标题: java类型转换问题
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)不报错

作者: hongkexy    时间: 2017-2-26 22:48
(a+c)默认int,(b+d)还是int。

作者: 维斯布里克    时间: 2017-2-26 23:04
hongkexy 发表于 2017-2-26 22:48
(a+c)默认int,(b+d)还是int。

int不是就默认提升为long?

作者: 维斯布里克    时间: 2017-2-26 23:09
hongkexy 发表于 2017-2-26 22:48
(a+c)默认int,(b+d)还是int。

那个还是只有byte.short,char.运算右边变为int,其他的变为右边中的大类型??

作者: hongkexy    时间: 2017-2-27 00:21
维斯布里克 发表于 2017-2-26 23:09
那个还是只有byte.short,char.运算右边变为int,其他的变为右边中的大类型??
...

除了前面三个会默认提升为int,其他的都是按最大提升。

作者: tzslk    时间: 2017-2-27 00:32
是这样,b+d没有报错,首先原因是两个都是int类型,如果这两个某一个是int类型的最大值,那么再加上一个数,就会“溢出”,然后输出会变成负数,第二个 因为声明的时候是byte类型,两个变量相加,编译器同样判断可能会超过127,比如a=126,c=2,是按照默认的int类型进行,然后在转为byte,所以编译器在判断的时候会提示可能会损失精度。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2