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

© guowei 中级黑马   /  2016-7-24 16:08  /  7858 人查看  /  27 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

4黑马币
short  a=1;a=a+1;有什么错
short  b=1;b+1=b;有什么错

27 个回复

正序浏览
第一题  a=a+1默认是int类型的数的操作  会报错  需要强制转换                                                                               第二题 表达式不是这么写的 应该是b=b+1
回复 使用道具 举报
a是short类型,1是int类型,相加的结果是int类型,不能赋值给short类型的变量
回复 使用道具 举报
第一句a = a + 1运算时类型提升,所以可能会损失精度。
第二句b + 1 =b 是表达式错误。
回复 使用道具 举报
class Test {
        public static void main(String[] args) {

                /*
                错误: 不兼容的类型: 从int转换到short可能会有损失
                原因是a+1这个运算过程中short会自动类型提升,最后结果会是int型
                而把int高类型转换为低类型会损失精度,会报错
                */
                short a = 1;
                a = a+1;
               
                /*
                错误: 意外的类型
                这个错误是因为我们赋值的格式是,
                右边的赋值给左边,
                例如 a = 5,右边可以是常量,可以是式子,但是左边只能是数据类型
                */
                short b = 1;
                b + 1 = b;                               
        }
}
回复 使用道具 举报
这么多人回答也不回应
回复 使用道具 举报
本帖最后由 liusonglin 于 2016-8-2 22:12 编辑

第一个:
                数据类型的默认转换:
                                A:从小到大
                                B:byte, short, char -- int -- long -- float -- double
                                C:byte, short, char 之间不相互转换,直接转成int类型参与运算。
                变量a为short类型,由于数据类型的默认转换,所以 a + 1 的结果为int类型,不能直接把int类型的值赋值给short类型的
                变量。

第二个:
                格式本身就有问题。
回复 使用道具 举报
short 是2个字节,int是4个字节,而加法运算符的结果是一个int,类型不匹配
第二个是:赋值运算符的左边必须是变量
回复 使用道具 举报
a和1相加,a会自动类型提升为int,和1相加之后,所得到的值是int类型,要赋值给short类型,需要进行强制类型转换。a = (short)(a + 1);   不要忘记括号哦

第二行这个b的问题,我想应该是用来和a的问题来进行对比的,正确的写法应该是b += 1;
这样写相当于b = (short)(b + 1);   是自动强转,也可以理解为一种优化机制。
回复 使用道具 举报
short,char,byte在运算的时候回自动转成int型,int型的值赋值给short会报精度损失,希望能帮到你
回复 使用道具 举报
b+1 = b;  不能用变量来接收,
回复 使用道具 举报
a=a+1;在做运算的时候会自动提升为int类型,所以要么用int来接收要么强转为short,
回复 使用道具 举报
[Java] 纯文本查看 复制代码
class Swap {
	public static void main(String[] args){
		short a = 1;

		//右边如果有变量的话,这两个数字都会转换为int型的然后在计算
		// 右边为int型的值,赋值给byte型的会损失精度
		// 错误: 可能损失精度
		a = a + 1;	
		
		short b = 1;

		//赋值语句错误
		// 错误: 意外的类型
		b + 1 =b;
	}
}
回复 使用道具 举报
明天你好hxq 来自手机 中级黑马 2016-7-30 23:29:07
15#
short类型进行运算时会自动提升为int类型的,而int类型等于short类型必须强转
回复 使用道具 举报
因为 short类型如果和1(整数的默认类型是int型)则会提升为int,所以结果为int类型,如果想要正确则需要强制转化成short类型,b = (short) (b+1);
回复 使用道具 举报
short  a=1;a=a+1;
首先我们要知道,数字默认为 int类型,对于short a = 1;这里编译器为我们自动判断 如果赋值没有超过short的表示范围,则赋值成功,如果超过了,则报错;对于a=a+1,首先进行 等号 右边的计算,a是short类型变量,与 int类型变量1 相加后,提升至int类型,在用short类型的 a 接收它,报错。处理方法 a = (short)(a+1);


short  b=1;b+1=b;有什么错
对于赋值号(=)来说,左边必须为变量,不能有其他运算

求打赏,考黑马积分不够!
回复 使用道具 举报
a是short类型,1是int 类型的,两个相加得到的是int类型的数据,用byte接受会损失精度,加个强制转换就可以了,a = (short)(a+1);
b类型跟a的思路一样
回复 使用道具 举报
敲代码小蚂蚁 来自手机 中级黑马 2016-7-28 00:39:35
11#
你这类型默认运算是int型,你这个类型小于int类型,所以会报出类型转换错误。
回复 使用道具 举报
short  a=1;a=a+1;当你进行计算的时候,系统会自动转为默认类型即int类型,而你的a却是short类型所以会报错,你可以这样写  a = (short)(a+1);
short  b=1;b+1=b;这个的错误是,你不可把一个变量赋值给一个表达式,在Java中表达式规定要求写在等式右边。
回复 使用道具 举报
a是short类型的,a+1会先把a变成int类型在相加,所以a+1就是int类型,所以相等就错了,
回复 使用道具 举报
(short)a + (int) 1 = (int)?  所有要强转      b能赋值给表达式吗  没见这么写的
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马