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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

最佳答案

查看完整内容

楼主,你好! 首先,回答这个问题,我们要先弄懂 short 和 int 在内存中占多少个字节: short 是 int 的修饰符,在内存中占两个字节。 int 是整型,在内存中占四个字节。 好了,现在来分析题目: short a=1;a=a+1; 分号代表语句的结束。这两句代码,都是赋值语句,cpu在执行的时候都是从右往左执行的。 首先,第一句是short a=1.这时1默认是int 类型。第一句的意思是把整型数据1赋值给short类型的变量a。很明显,是不够存的。因此 ...

27 个回复

倒序浏览
楼主,你好!
首先,回答这个问题,我们要先弄懂 short 和 int 在内存中占多少个字节:
short 是 int 的修饰符,在内存中占两个字节。
int 是整型,在内存中占四个字节。
好了,现在来分析题目:
short a=1;a=a+1;
分号代表语句的结束。这两句代码,都是赋值语句,cpu在执行的时候都是从右往左执行的。
首先,第一句是short a=1.这时1默认是int 类型。第一句的意思是把整型数据1赋值给short类型的变量a。很明显,是不够存的。因此丢失精度。第二句是把短整型short类型a与整型数据1进行加法运算,结果是整型(自动类型转换),而在第一句已经定义了a变量是短整型。因此,a+1的整型结果赋值给短整型。同样的道理,也是不够存的。也会丢失精度。这两句代码弄明白之后,第三句和第四句也是一个道理了。纯手打的,满意请采纳,谢谢!
回复 使用道具 举报
a= a+1; a是short类型 1 是int类型的  需要强制转换为int类型 a = (short) a + 1;
b+1 =b ;应该是表达式写错吧
回复 使用道具 举报
a=a+1    short型与int型相加  自动换成int型;想要赋值 给short型,肯定损失精度啊.第二个表达错误.
回复 使用道具 举报
short  a=1;a=a+1;a是short型的,而short在进行计算时会自动转换成int类型的,低精度自动转换成高精度,a+1得到结果为int型,而用short型数据去接收int型会损失精度!
short  b=1;b+1=b;个人认为表达式有问题!
回复 使用道具 举报
第一个错,因为a=a+1;这句代码是错误的,a本身是short类型,而1本身就int类型的,a与1做运算最终的结果是int类型的.所以无法直接将一个int型数据赋值给short型
回复 使用道具 举报
fzc123 中级黑马 2016-7-26 19:02:06
7#
第一个错,因为a=a+1;这句代码是错误的,a本身是short类型,而1本身就int类型的,a与1做运算最终的结果是int类型的.所以无法直接将一个int型数据赋值给short型
第二个是表达错误
回复 使用道具 举报
如果改成a+=1;就对,默认强转
回复 使用道具 举报
(short)a + (int) 1 = (int)?  所有要强转      b能赋值给表达式吗  没见这么写的
回复 使用道具 举报
a是short类型的,a+1会先把a变成int类型在相加,所以a+1就是int类型,所以相等就错了,
回复 使用道具 举报
short  a=1;a=a+1;当你进行计算的时候,系统会自动转为默认类型即int类型,而你的a却是short类型所以会报错,你可以这样写  a = (short)(a+1);
short  b=1;b+1=b;这个的错误是,你不可把一个变量赋值给一个表达式,在Java中表达式规定要求写在等式右边。
回复 使用道具 举报
敲代码小蚂蚁 来自手机 中级黑马 2016-7-28 00:39:35
12#
你这类型默认运算是int型,你这个类型小于int类型,所以会报出类型转换错误。
回复 使用道具 举报
a是short类型,1是int 类型的,两个相加得到的是int类型的数据,用byte接受会损失精度,加个强制转换就可以了,a = (short)(a+1);
b类型跟a的思路一样
回复 使用道具 举报
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;有什么错
对于赋值号(=)来说,左边必须为变量,不能有其他运算

求打赏,考黑马积分不够!
回复 使用道具 举报
因为 short类型如果和1(整数的默认类型是int型)则会提升为int,所以结果为int类型,如果想要正确则需要强制转化成short类型,b = (short) (b+1);
回复 使用道具 举报
明天你好hxq 来自手机 中级黑马 2016-7-30 23:29:07
16#
short类型进行运算时会自动提升为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;
	}
}
回复 使用道具 举报
a=a+1;在做运算的时候会自动提升为int类型,所以要么用int来接收要么强转为short,
回复 使用道具 举报
b+1 = b;  不能用变量来接收,
回复 使用道具 举报
short,char,byte在运算的时候回自动转成int型,int型的值赋值给short会报精度损失,希望能帮到你
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马