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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;会报类型转换异常,因为在java中整数的默认类型是int类型,而int类型在内存中占4个字节,而s1是short类型占两个字节的把4个字节的赋值给两个字节的会损失精度,报告异常
short s1 = 1; s1 += 1;编译正常,因为这个运算复合运算了,这句隐含一个意思是右边运算完成无论是什么类型都要强制转换到左边的short类型的,就相当于short=(short)(s1+1)。

4 个回复

倒序浏览
  对于short s1=1;s1=s1+1;由于s1+1运算时会自动提升表达式的类型,所以会自动提升表达式的类型,所以结果是INT型,在复制给short类型s1时,编译器将报告需要强制转换类型的错误。
short s1=1;s1+=1;由于+=是java语言规定运算符,java编译器会对她进行特殊处理,因此可以编译。
回复 使用道具 举报
public class  Demo
{
    public static void main(String[] args)
        {
             short s1=1;//定义了一个short类型的变量并初始化为1,在这儿要明确的short类型在内存中占两个字节
             s1=s1+1;//1在java中默认的是int类型的,在内存中占4个字节。当jvm执行(s1+1)时会把结果自动提
                                               升为int类型,这是在赋给变s1时就出错了,因为数据类型不匹配。可以做强制类型转换s1=short(s1+1)

         }
}
public class Demo1
{
   public static void main(String[] args)
    {
        short s1=1;
        s1+=1;//在这儿是没有错误的,因为+=是一个特殊的赋值运算符,自动完成运算、类型转换和赋值
     }
}
回复 使用道具 举报
s1=s1+1 运算两次 先运算s1+1然后赋给 s1 ,但是s1+1 因为精度向上变化 所以s1+1 已经变成了int型, 而s1 是short型,iint占4字节 short 占1个字节,肯定要丢失精度,而s1+=1,是因为 s1+=1,是进行一次赋值运算 自动转换类型!
回复 使用道具 举报
1. short s1 = 1; s1 = s1 + 1; s1+1运算结果是int型,需要强制转换类型2. short s1 = 1; s1 += 1;(可以正确编译)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马