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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ╰青青子佩ˊゝ 中级黑马   /  2014-4-12 21:44  /  1111 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问这两种写的形式有什么区别。
  1.                 short s = 3 ;
  2.                 //1.这行为什么不能直接是s = s + 2 ,为什么要加(short)类型转换才行
  3.                 s = (short) (s + 2) ;
  4.                 //2.按道理这种方式应该也要用上类型转换啊
  5.                 s += 2 ;
复制代码

7 个回复

倒序浏览
short s = 3;
s = s + 2;  // 出现错误,short两个字节,与int四个字节相加不能赋给两个字节
s+=2; //自动转换数据类型
希望对你有帮助吧,加油!

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
在java当中,整型数据默认为int,没错吧,所以第一行代码,把int类型的3赋值给s变量其实也是底层已经做了转化的。
我知道你是什么意思,s+=2  ---------->对应的是 s = (short) (s + 2) ;  是等价的,而不是和s=s+2 等价,原因是因为s+=2 是底层java帮我们做了强转,所以不用我们手动来转。如果我们没强转,java底层也没有强转的话,编译肯定不会通过的。这样想其实java已经相对于其他编程语言优化了很多了。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
  1. short s = 3 ;
  2.                                 s = s + 2;//赋值号左边的s类型提升了转换成int类型了,可能导致损失精度
  3.                 s = (short) (s + 2) ;

  4.                 //2.按道理这种方式应该也要用上类型转换啊

  5.                 s += 2 ; //s += 2含自动转换类型,将s自动转换成short类型。
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
s += 2;       +=这种方式java在内部有帮你做特殊处理所以不用你去强制类型转换,直接用就可以
回复 使用道具 举报
short s = 3; // javac 编译后在字节码文件里实际还是int s=3
s = s + 2;  //   向上转型 运算结果转变为int类型变量,与左侧字面类型不一致,赋值出错
s =(short) s + 2;  //   强制类型转换,转变为short类型变量
s+=2;        //   自动类型转换,javac编译后会将s+=2展开并自动插入一条(short)强制类型转换语句,结果同s=(short)s+2;

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
demown 中级黑马 2014-4-13 09:27:32
7#
强转啊  int 是默认的类型 ,也就是在内存是32位的,而你short是16位的。类型不一样不可以计算啊
所以
short s = 3//对应的是short
s = s + 2 // 他们类型默认int 。<shurt> s= <int> s + <int>2.
基本数据类型不一样就要强制转换。
s+=2//表示的两边相加并且转换相同int类型.

评分

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

查看全部评分

回复 使用道具 举报
  1. short s = 3 ;
  2.                                 s = s + 2;             <span style="background-color: rgb(255, 255, 255);"> //   向上转型 运算结果转变为int类型变量,与左侧字面类型不一致,赋值出错</span>
  3.                 s = (short) (s + 2) ;

  4.                 //2.按道理这种方式应该也要用上类型转换啊

  5.                 s += 2 ;            //s += 2含自动转换类型,将s自动转换成short类型。
复制代码
第一行代码,把int类型的3赋值给s变量其实也是底层已经做了转化的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马