黑马程序员技术交流社区
标题:
请各位大神详细解答
[打印本页]
作者:
LJZkevin
时间:
2014-5-17 22:10
标题:
请各位大神详细解答
short s = 1;
s = s + 1;
和
short s = 1;
s+=1;
有问题吗?为什么呢?
复制代码
作者:
谢振宣
时间:
2014-5-17 22:21
本帖最后由 谢振宣 于 2014-5-17 23:11 编辑
class Demo
{
public static void main(String[] args)
{
//short s = 1;
//s = s + 1;//此处编译时不会通过,通过运算,右侧s的类型被提升为int
//此时的运算结果为int型,不可以再赋值给short型的变量
short s = 1;
s+=1;//此处只是一次赋值操作,不会涉及到类型的自动提升,编译和运行都没问题。
System.out.println(s);
}
}
复制代码
作者:
苏周周
时间:
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