• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
羊羊生
博客园    首页    新随笔    联系   管理    订阅  订阅

JAVA运算符自动类型提升问题(一)++和+1的区别

JAVA加法运算++和+1的区别

Java整型的默认数据类型是int型,这就导致了在进行某些运算时会产生一些问题

public class Plus {
   public static void main(String[] args) {
       short s=10;
       s=s+1;
  }
}

上面的程序在运行时会报错

java: 不兼容的类型: 从int转换到short可能会有损失

原因是s是short类型的数据,而1默认是int类型的数据,二者相加会自动转换为int类型的数据,无法再用short类型数据接收

如果一定要用short接收,有两个办法

一是强制类型转换,将s+1转换为short类型

public class Plus {
   public static void main(String[] args) {
       short s=10;
       s=(short)(s+1);
       System.out.println(s);
  }
}

上述程序可以正常输出,输出结果为1

但是要注意转换的数据如果超过short的表示范围,会有精度损失

二是使用单目运算符++

public class Plus {
   public static void main(String[] args) {
       short s=10;
       s=s++;
       System.out.println(s);
  }
}

上述程序输出结果也为1,且不用进行类型转换

从汇编角度分析,我觉得原因可能是 short类型为16字节,和32字节的int型运算后数据变为32字节大小,此时即使高16位全为0机器也无法识别;而++运算short类型数据可能只进行了INC运算,不会增加位数



posted @ 2021-02-27 09:29  羊羊生  阅读(563)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3