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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

a和1相加,a会自动类型提升为int,和1相加之后,所得到的值是int类型,要赋值给short类型,需要进行强制类型转换。a = (short)(a + 1);   不要忘记括号哦

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

第二个:
                格式本身就有问题。
回复 使用道具 举报
这么多人回答也不回应
回复 使用道具 举报
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;                               
        }
}
回复 使用道具 举报
第一句a = a + 1运算时类型提升,所以可能会损失精度。
第二句b + 1 =b 是表达式错误。
回复 使用道具 举报
a是short类型,1是int类型,相加的结果是int类型,不能赋值给short类型的变量
回复 使用道具 举报
第一题  a=a+1默认是int类型的数的操作  会报错  需要强制转换                                                                               第二题 表达式不是这么写的 应该是b=b+1
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马