• 首页
  • 邻居
  • 关于
  • 归档
  • 搜索
  • 夜间模式
    ©2020-2026  我的学习笔记 Theme by OneBlog

    我的学习笔记博客

    搜索
    标签
    # 随笔 # Java # 教程 # openwrt # Mysql # SQL # 爬虫 # post # Js调优 # MAVEN
  • 首页>
  • >
  • 正文
  • java中 关于short a +=1; 与short a=a+1 的问题

    2020年03月19日 1.3 k 阅读 0 评论 806 字

    += 左右两边类型不同是会自动强制转换
    ++ 则不会自动强制转换
    short a =0;int b = 1;a +=b;
    // 少用这个a = a+b;//会出错的
    a = (short)( a + b);
    short a = a+1;要改成short a = (short)( a + 1);//1是int类型你写的那3个没什么大的区别但要注意这个 a = a++;a的值是不会改变的;
    for(int i =1;i<10;i++){
    a=a++;
    System.out.println(a);
    }
    System.out.println(a);

    ***++在前是先自加本身在赋值
    ++在后是先赋值本身在自加***

    short i =1; i=i+1;
    short i=1;i+=1;
    这两有什么区别呢 ?
    对两个容量不一样的数据类型的变量进行算术运算时,java会自动将小容量的变量进行精度提升,然后再进行运算,得到的结果类型是提升后的大容量的数据类型.如果将该结果赋值给小容量的数据类型的变量,则必须进行强制的类型转换,否则编译程序会报损失精度错.如楼主示例,用i来表示1:
    short s1 = 1;
    int i = 1;
    首先,因为short类型是16位的,而int类型是32位的,在进行
    (s1+i) 运算时,自动将s1提升到32位,然后与i相加,得到的结果是32位的,而此时
    s1=s1+i; 必然报错,因为如果赋值成功,只是把低16位赋给了s1,这个虽然正是楼主想要的结果,但是编译程序却不能判定你的意图是什么.
    执行强转:
    s1=(short)(s1+i); 就没问题了.
    s1+=i;能编译通过并得到正确结果,而 s1=s1+i; 却报错,是因为它们并不是等价的,s1+=i的方式java会对i进行窄化转换,由编译程序自动执行.

    本文著作权归作者 [ admin ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    首页邻居关于归档
    Copyright©2020-2026  All Rights Reserved.  Load:0.016 s
    京ICP备18019712号
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。