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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北极雪871208 中级黑马   /  2014-3-21 16:52  /  899 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
   short   s=1;
        s=s+2;   结果如何?
        s+=2;  结果如何?
我是初学者,如果版主觉得这个有用,请给个积分吧!谢谢!
---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
此问设计到java数据类型转换的问题,数据类型分为自动转换和强制转换,s=s+2,s+2运算是,自动将s提升为int型,与2计算的结果赋给short类型的s,肯定会出错,而s+=2,编译器在编译的时候,默认进行了强制类型转换,结果最终转换为short类型赋给s,所以不会出错,输出s=3.

共同学习。
版主大人,新手求分若渴。。:loveliness:

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
你这里面涉及到来那个知识点,一个是转型的问题。一个是赋值问题,
第一个在编译时肯定是不被通过的,因为定义的是 short类型是一个八位而的在于一个int型四个八位相加的时候,short会在计算机底层是会被提升为四个八位的,这样相加的结果是四个八位,在赋给一个八位 是不可能的

而下面s+=2;这是一个步骤来完成的,自增和赋值是一次性解决的,所以这里不会出错的

应该是这样的吧    相互学习

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
第一个会报错,因为int类型是无法转换成short的。所以会报错,我们可以使用类的推断,取它们的交集,即Number它是BigDecimal,BigInteger,Ingeter,Byte,Short,Long,Double,Float,而Number的子类必须提供方法将值转换成byte,short,int,long,double,float的方法。而第二个是3结果,至于是什么类型的嘛。不好说。我测试了使用int,short,Number都可以接受这个运算出来的结果。下面是我做的结果:
short s=1;
Number s5=s+2;
System.out.println(s5);
short s1=s+=2;
System.out.println(s1);
  

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
my_heima 发表于 2014-3-21 16:59
此问设计到java数据类型转换的问题,数据类型分为自动转换和强制转换,s=s+2,s+2运算是,自动将s提升为int ...

恩恩,我也是新手,可是版主也是大方些啊,咱们需要技术分
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马