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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 米江波 于 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
我始终相信大牛无处不在的,在线等~


6 个回复

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

+=    这是赋值运算包含了强制类型转换
另外各种类型相加,double最大
回复 使用道具 举报
你有什么不明白的吗?
short x=5;
    x+=6;
这里 += 含有隐式的强制类型转换,将+=右边的数据强制转换成了左边数据的数据类型;

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

谢谢了各位,明白啦。。。。::D
回复 使用道具 举报
double是最高级的所以都会默认转化为double类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马