简单的类型转换的问题

zhf0021 2005-04-06 12:28:22
short s1 = 1; s1 = s1 + 1;//编译不通过

short s1 = 1; s1 += 1;
编译可以通过?
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhf0021 2005-04-06
  • 打赏
  • 举报
回复
资质愚钝,看的不是很明白
s1 += 1

s1 = s1 + 1
不时等价的么?
这里的+=操作符有什么特殊的地方?
谢谢
taglib 2005-04-06
  • 打赏
  • 举报
回复
1是literal,默认是int类型,但在赋值给short, byte变量时,编译器自动会检查其值是否在所赋变量的类型的范围内,

short s1 = 1;只赋值一次

s1 += 1;同理,对s1只计算一次

但s1 = s1 + 1;有所不同,因为+操作的结果是int,所以你需要用

s1 = (short)(s1 + 1);
zhf0021 2005-04-06
  • 打赏
  • 举报
回复
多谢楼上各位!!
topil 2005-04-06
  • 打赏
  • 举报
回复
资质愚钝,看的不是很明白
s1 += 1

s1 = s1 + 1
不时等价的么?
这里的+=操作符有什么特殊的地方?
谢谢
=====================================
等价只有在两边的类型都是int的时候才成立!
topil 2005-04-06
  • 打赏
  • 举报
回复
s1 += 1; 通过编译器编译之后其实是这个样子的 : s1=(short)(s1+1);
而s1 = s1 + 1; 编译不通过就是因为si+1 后结果转型成了int 而直接把int赋给short是不允许的。
liuzhx 2005-04-06
  • 打赏
  • 举报
回复
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。
可修改为s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正确 因为没有改变类型。
taglib 2005-04-06
  • 打赏
  • 举报
回复
15.26.2 Compound Assignment Operators
http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5304

For example, the following code is correct:

short x = 3;
x += 4.6;

and results in x having the value 7 because it is equivalent to:

short x = 3;
x = (short)(x + 4.6);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧