黑马程序员技术交流社区

标题: 请各位大神详细解答 [打印本页]

作者: LJZkevin    时间: 2014-5-17 22:10
标题: 请各位大神详细解答
  1. short s = 1;
  2.         s = s + 1;
  3.         和
  4.         short s = 1;
  5.         s+=1;
  6.         有问题吗?为什么呢?
复制代码

作者: 谢振宣    时间: 2014-5-17 22:21
本帖最后由 谢振宣 于 2014-5-17 23:11 编辑
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //short s = 1;
  6.                 //s = s + 1;//此处编译时不会通过,通过运算,右侧s的类型被提升为int
  7.                                  //此时的运算结果为int型,不可以再赋值给short型的变量
  8.                 short s = 1;
  9.                 s+=1;//此处只是一次赋值操作,不会涉及到类型的自动提升,编译和运行都没问题。
  10.                 System.out.println(s);
  11.         }
  12. }
复制代码

作者: 苏周周    时间: 2014-5-18 00:24
short s = 1;
        s = s + 1;//这个表达式先是给s进行自动提升为int类型
                //后再加1运算,结果是int类型,把int类型赋值给short的s,
               //会丢失精度,所以编译会错误
       和
        short s = 1;

      s+=1;//这表达式是先将short型的s和1相加后的值赋值
           //  给short型的s,+=是赋值运算符,赋值的时候java
        //java 虚拟机会先判断赋的值在short类型的范围内没,有强制动作,如果在short范围内,编译通过;
作者: 屋檐下的期待    时间: 2014-5-18 00:56
你这个问题 涉及  隐式转换, 和强制转换的 问题。
        short s = 1;   这 是 一个简单的定义,好理解。
        s = s + 1;   这个其实 是 一个赋值语句,但是 注意这里的s是 short类型的, short类型占用2个字节,
        Java里 正整数默认的都是 int 类型的。 s =s  +1;相当于你把一个 short类型(2个字节)的加上一个 int类型(4个字节)的和的结果赋值给了s,这个是隐式转换(自动转换),编译肯定要报错的。 s+=1;则是强制转换。  就是把你的  s+1  强制转换成 short型的。

作者: Seraphim    时间: 2014-5-19 09:11
有,short类型在自增运算或者“+=”运算时会转为int类型,将int类型赋值给shor时会出错,而自增或者“+=”运算不会改变shor的类型




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