黑马程序员技术交流社区

标题: 黑马程序员 考考你细节问题! [打印本页]

作者: 北极雪871208    时间: 2014-3-21 16:52
标题: 黑马程序员 考考你细节问题!
---------------------- <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>、期待与您交流! ----------------------
作者: my_heima    时间: 2014-3-21 16:59
此问设计到java数据类型转换的问题,数据类型分为自动转换和强制转换,s=s+2,s+2运算是,自动将s提升为int型,与2计算的结果赋给short类型的s,肯定会出错,而s+=2,编译器在编译的时候,默认进行了强制类型转换,结果最终转换为short类型赋给s,所以不会出错,输出s=3.

共同学习。
版主大人,新手求分若渴。。:loveliness:
作者: 学习代码    时间: 2014-3-21 17:13
你这里面涉及到来那个知识点,一个是转型的问题。一个是赋值问题,
第一个在编译时肯定是不被通过的,因为定义的是 short类型是一个八位而的在于一个int型四个八位相加的时候,short会在计算机底层是会被提升为四个八位的,这样相加的结果是四个八位,在赋给一个八位 是不可能的

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

应该是这样的吧    相互学习
作者: syusikoku    时间: 2014-3-21 17:25
第一个会报错,因为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);
  
作者: 北极雪871208    时间: 2014-3-21 19:13
my_heima 发表于 2014-3-21 16:59
此问设计到java数据类型转换的问题,数据类型分为自动转换和强制转换,s=s+2,s+2运算是,自动将s提升为int ...

恩恩,我也是新手,可是版主也是大方些啊,咱们需要技术分




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