short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型) short s1 = 1; s1 += 1;(可以正确编译) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。 short s1 = 1; s1 += 1;//这个也不相当于 s1 =s1+1;为什这个能通过而 s1 =s1+1;不能通过啊,新手请各位前辈指点 http://blog.csdn.net/exceljava/archive/2007/10/10/1819291.aspx可以看一下 s1是short型,s1+1是int型,不能显式转化为short型。楼主特意散分么 1为int型,i为short型,相加之后,就为int型,所以不能赋给 1为int型,s1为short型,相加之后,就为int型, 所以不能赋给short型的s1,可以进行一个强制类型转换s1 =(short)(s1 + 1) 就可以了 short s1 = 1; s1 += 1;(可以正确编译)这个为什么对错的大家都晓得,对的为什么?????、? 这个问题和+=的运算功能有关第一种方式:short s1 = 1; s1 = s1 + 1;需强行转化因为short s1=1在栈中开辟了一个short类型的空间;而s1=s1+1;中s1是short类型,在栈中开辟了一个short类型的空间,而1是int类型,int类型比short类型大,所以相加后的结果应为比较大的类型,把s1+1的结果赋予short类型的变量s1,固然需要强行转化;第二种方式:short s1 = 1; s1 += 1;(可以正确编译)由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化; 第一种方式:short s1 = 1; s1 = s1 + 1;需强行转化自动类型提升:当分析表达式时,Java自动提升各个byte 型或short型的操作数到int 型。 根据自动类型提升,我们知道,s1 (short型)+ 1(int型),结果为(int),将int赋值给short,会损失精度,当然不可以了。第二种方式:short s1 = 1; s1 += 1;(可以正确编译)自加没有自动类型提升问题由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;-----------------类型提升的约定 a和b作某种运算 a和b中有double,结果就是double a和b中有float,结果就是float a和b中有long,结果就是long 除此之外,结果都是int 整型的默认的类型为int型,遇到一个数,她就将其认为int型的,然后是s1 = s1 + 1.他的结果为int的 +=会自动类型转换,s1 =(short)(s1 + 1)也还可以s1 = s1 + (short)1 s1 =(short)(s1 + 1)也还可以s1 = s1 + (short)1这个不行就用s1 =(short)(s1 + 1)就行了s1 = s1 + (short)1还得s1=(short) (s1 + (short)1),多此一举了,呵呵 论坛中如何显示回复帖子数 有两个疑惑的问题,请高手解答,在线等! 关于父类构造函数调用子类成员的困惑 请问Vector和ArrayList有什么区别啊? 用户进行文件上传,管理程序如何对用户的传输速率及上传内容容量进行控制 急求:Jcreator 显示中文问题 一个困扰了我很多天的问题 JFrame加JMenuBar的问题 大佬们请帮帮我没有思路啊 用cmd运行java 初学者对java匿名内部类构造原理的分析 (散分) List list = new ArrayList(); 是什么意思??
为什这个能通过而 s1 =s1+1;
不能通过啊,新手请各位前辈指点
可以看一下
楼主特意散分么
所以不能赋给
所以不能赋给short型的s1,可以进行一个强制类型转换s1 =(short)(s1 + 1)
就可以了
错的大家都晓得,对的为什么?????、?
第一种方式:
short s1 = 1; s1 = s1 + 1;需强行转化
因为short s1=1在栈中开辟了一个short类型的空间;
而s1=s1+1;中s1是short类型,在栈中开辟了一个short类型的空间,而1是int类型,
int类型比short类型大,所以相加后的结果应为比较大的类型,把s1+1的结果赋予short类型的变量s1,固然需要强行转化;
第二种方式:
short s1 = 1; s1 += 1;(可以正确编译)
由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;
short s1 = 1; s1 = s1 + 1;需强行转化
自动类型提升:当分析表达式时,Java自动提升各个byte 型或short型的操作数到int 型。
根据自动类型提升,我们知道,s1 (short型)+ 1(int型),结果为(int),将int赋值给short,会损失精度,当然不可以了。第二种方式:
short s1 = 1; s1 += 1;(可以正确编译)
自加没有自动类型提升问题
由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;-----------------
类型提升的约定
a和b作某种运算
a和b中有double,结果就是double
a和b中有float,结果就是float
a和b中有long,结果就是long
除此之外,结果都是int
然后是s1 = s1 + 1.他的结果为int的
s1 =(short)(s1 + 1)也还可以s1 = s1 + (short)1
这个不行
就用s1 =(short)(s1 + 1)就行了
s1 = s1 + (short)1还得s1=(short) (s1 + (short)1),多此一举了,呵呵