short类型复合操作符问题
来源:互联网 发布:橡塑保温板 淘宝 编辑:程序博客网 时间:2024/05/22 10:44
转自:http://1035054540-qq-com.iteye.com/blog/1458005,讲解的非常清楚,推荐一下
short类型问题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
这里涉及到变量类型统一的问题
有这样的规则,1.高位转低位需要强制转换
2.低位转高位自动转.
short s1 = 1; s1 = s1 + 1;有什么错?
答: i 是int 型 s1 short型 通过 + 运算后
s1 自动转为int 型 所以错!
short s1 = 1; s1 += 1;有什么错?
答: 如果你认为表达式(x += i)只是表达式(x = x + i)的简写方式,这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符(=),而第一个表达式使用的是复合赋值操作符。Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),其中T是E1的类型,除非E1只被计算一次。
换句话说,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。
因此,复合赋值表达式可能是危险的。为了避免这种令人不快的突袭,请不要将复合赋值操作符作用于byte、short或char类型的变量。
因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。 后面的那个不会发生类型的提升,JAVA规范上说 e1+=e2 实际上是 e1=(T1)(e1+e2),其中T1是e1的数据类型。 s1+=1等效于 s1=(short)(s1+1),所以是正确的。
- short类型复合操作符问题
- ConcurrentHashMap复合操作问题
- concurrent复合操作问题
- java-int&short-byte类型转换问题
- C++中的各种复合类型操作
- Java移位操作符及其对char、byte、short类型数值的处理
- char/byte/short类型的加法和类型转换问题
- java中byte char short类型数据的操作说明
- 复合类型
- 复合类型
- 复合类型
- 类型转换问题(java会把byte,short和char的运算操作转换为int类型即低精度自动向高精度转换)
- wchar_t 与 unsigned short 类型不匹配问题
- Short类型的List contains(Byte.valueOf("1"))的问题
- 关于short 类型
- short类型相关
- 数据库字段short与Short类型区别
- 多重复合类型变量初始化时的大括号问题
- Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示
- linux下字符设备驱动的三种创建方式
- Autolayout(自动布局)
- 生成32位随机字符
- POJ 3744 水概率dp+水矩阵快速幂
- short类型复合操作符问题
- Android十六进制颜色说明
- PowerPC平台 Linux移植二
- _USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义
- 设计思路 为机床增加防错功能以实现机床动作的安全控制
- 欢迎使用CSDN-markdown编辑器
- 第12周项目3-日期时间类
- Sqrt(x)
- Android触摸屏事件派发机制详解与源码分析一(View篇)