黑马程序员技术交流社区

标题: 关于类型转换的问题,真的真的弄不懂 [打印本页]

作者: 米江波    时间: 2015-4-23 22:33
标题: 关于类型转换的问题,真的真的弄不懂
本帖最后由 米江波 于 2015-4-23 22:51 编辑

class Demo
{
    public static void main(String[] args)
    {
    short x=5;
    x+=6;
   (运算后成了4个字节 可以赋值给short?编译竟没报错!)
    System.out.println(x);
    }
}
↑↑↑已经解决了,谢谢各位,↓↓↓怎么理解???

还有这道题,那位大神给我抛媳下
xfloat型变量,ydouble型变量,aint型变量,blong型变量,cchar型变量,则表达式x+y*a/x+b/y+c计算结果的类型为()
A: int                        B: long                        C: double   √√√        D: Char
我始终相信大牛无处不在的,在线等~



作者: 1017161726    时间: 2015-4-23 22:53
第一个,x+=6,是short型x自加6,它和x=x+6的区别就是它不涉及类型转换问题。第二个,因为类型转换都是向上转型,所以表达失踪要是涉及类型转换,就以最高级类型为准的。所以当然是double了。类型转换顺序:double>float>long>int>short,byte,char。当然这是不涉及字符串的情况下。
作者: 大西洋    时间: 2015-4-23 22:55
低精度会自动转换为高精度,short型的 x 会自动转换为int型,因此不会报错~ 第二题的原理同“低精度自动转高精度”,所以答案为:double~
作者: pengcheng0328    时间: 2015-4-23 22:56
本帖最后由 pengcheng0328 于 2015-4-23 22:59 编辑

+=    这是赋值运算包含了强制类型转换
另外各种类型相加,double最大

作者: 龙腾浩少    时间: 2015-4-23 22:56
你有什么不明白的吗?
short x=5;
    x+=6;
这里 += 含有隐式的强制类型转换,将+=右边的数据强制转换成了左边数据的数据类型;

另外下面那一道题,
byte、short、char在计算时首先转换成int类型,当有long参与时转换成 long,当有float时,转换成float,当有double参与运算时转换成double
顺序:byte/short/char --- int ---long --- float --- double
这是原来的一道面试题了。
作者: 米江波    时间: 2015-4-23 23:00
龙腾浩少 发表于 2015-4-23 22:56
你有什么不明白的吗?
short x=5;
    x+=6;

谢谢了各位,明白啦。。。。::D
作者: 飞翔的马驹    时间: 2015-4-23 23:10
double是最高级的所以都会默认转化为double类




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