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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LJZkevin 中级黑马   /  2014-5-17 22:10  /  966 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. short s = 1;
  2.         s = s + 1;
  3.         和
  4.         short s = 1;
  5.         s+=1;
  6.         有问题吗?为什么呢?
复制代码

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 谢振宣 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Silent_memory + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
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范围内,编译通过;
回复 使用道具 举报
你这个问题 涉及  隐式转换, 和强制转换的 问题。
        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型的。
回复 使用道具 举报
有,short类型在自增运算或者“+=”运算时会转为int类型,将int类型赋值给shor时会出错,而自增或者“+=”运算不会改变shor的类型
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马