黑马程序员技术交流社区

标题: short [打印本页]

作者: guowei    时间: 2016-7-24 16:08
标题: short
short  a=1;a=a+1;有什么错
short  b=1;b+1=b;有什么错

作者: linguoqun    时间: 2016-7-24 16:08
楼主,你好!
首先,回答这个问题,我们要先弄懂 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的整型结果赋值给短整型。同样的道理,也是不够存的。也会丢失精度。这两句代码弄明白之后,第三句和第四句也是一个道理了。纯手打的,满意请采纳,谢谢!
作者: 董志超_RXUzt    时间: 2016-7-24 17:29
a= a+1; a是short类型 1 是int类型的  需要强制转换为int类型 a = (short) a + 1;
b+1 =b ;应该是表达式写错吧
作者: 樱释空    时间: 2016-7-24 21:21
a=a+1    short型与int型相加  自动换成int型;想要赋值 给short型,肯定损失精度啊.第二个表达错误.
作者: 花陌相惜    时间: 2016-7-24 23:32
short  a=1;a=a+1;a是short型的,而short在进行计算时会自动转换成int类型的,低精度自动转换成高精度,a+1得到结果为int型,而用short型数据去接收int型会损失精度!
short  b=1;b+1=b;个人认为表达式有问题!
作者: fzc123    时间: 2016-7-26 19:00
第一个错,因为a=a+1;这句代码是错误的,a本身是short类型,而1本身就int类型的,a与1做运算最终的结果是int类型的.所以无法直接将一个int型数据赋值给short型
作者: fzc123    时间: 2016-7-26 19:02
第一个错,因为a=a+1;这句代码是错误的,a本身是short类型,而1本身就int类型的,a与1做运算最终的结果是int类型的.所以无法直接将一个int型数据赋值给short型
第二个是表达错误
作者: pwn582253080    时间: 2016-7-26 23:58
如果改成a+=1;就对,默认强转
作者: AlanMTuring    时间: 2016-7-27 00:17
(short)a + (int) 1 = (int)?  所有要强转      b能赋值给表达式吗  没见这么写的
作者: naonao1027    时间: 2016-7-27 11:59
a是short类型的,a+1会先把a变成int类型在相加,所以a+1就是int类型,所以相等就错了,
作者: raining    时间: 2016-7-27 22:19
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
你这类型默认运算是int型,你这个类型小于int类型,所以会报出类型转换错误。
作者: xpf0121    时间: 2016-7-28 21:45
a是short类型,1是int 类型的,两个相加得到的是int类型的数据,用byte接受会损失精度,加个强制转换就可以了,a = (short)(a+1);
b类型跟a的思路一样
作者: nblity007    时间: 2016-7-29 00:34
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;有什么错
对于赋值号(=)来说,左边必须为变量,不能有其他运算

求打赏,考黑马积分不够!
作者: 敲敲敲dm    时间: 2016-7-29 21:56
因为 short类型如果和1(整数的默认类型是int型)则会提升为int,所以结果为int类型,如果想要正确则需要强制转化成short类型,b = (short) (b+1);
作者: 明天你好hxq    时间: 2016-7-30 23:29
short类型进行运算时会自动提升为int类型的,而int类型等于short类型必须强转
作者: xiaobokk    时间: 2016-7-31 15:48
[Java] 纯文本查看 复制代码
class Swap {
        public static void main(String[] args){
                short a = 1;

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

                //赋值语句错误
                // 错误: 意外的类型
                b + 1 =b;
        }
}

作者: q1023212647    时间: 2016-8-1 10:23
a=a+1;在做运算的时候会自动提升为int类型,所以要么用int来接收要么强转为short,
作者: q1023212647    时间: 2016-8-1 10:24
b+1 = b;  不能用变量来接收,
作者: huangzhaoqing    时间: 2016-8-1 21:40
short,char,byte在运算的时候回自动转成int型,int型的值赋值给short会报精度损失,希望能帮到你
作者: yanzhipenglai    时间: 2016-8-1 23:50
a和1相加,a会自动类型提升为int,和1相加之后,所得到的值是int类型,要赋值给short类型,需要进行强制类型转换。a = (short)(a + 1);   不要忘记括号哦

第二行这个b的问题,我想应该是用来和a的问题来进行对比的,正确的写法应该是b += 1;
这样写相当于b = (short)(b + 1);   是自动强转,也可以理解为一种优化机制。
作者: truth95    时间: 2016-8-2 14:32
short 是2个字节,int是4个字节,而加法运算符的结果是一个int,类型不匹配
第二个是:赋值运算符的左边必须是变量
作者: liusonglin    时间: 2016-8-2 22:05
本帖最后由 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类型的
                变量。

第二个:
                格式本身就有问题。

作者: 小面团    时间: 2016-8-4 11:50
这么多人回答也不回应
作者: Flowert    时间: 2016-8-4 13:17
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;                               
        }
}
作者: 寒号鸟    时间: 2016-8-7 10:03
第一句a = a + 1运算时类型提升,所以可能会损失精度。
第二句b + 1 =b 是表达式错误。
作者: x55555lg    时间: 2016-8-7 23:30
a是short类型,1是int类型,相加的结果是int类型,不能赋值给short类型的变量
作者: double_x    时间: 2016-8-12 22:32
第一题  a=a+1默认是int类型的数的操作  会报错  需要强制转换                                                                               第二题 表达式不是这么写的 应该是b=b+1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2