zoukankan      html  css  js  c++  java
  • Java中int和short的转化

    例子[1]

    第一种情况:

    short a = 1;
    a = a + 1;    // 这一步会报错
    System.out.print(a);
    

    编译器会报错,原因如下:

    -w600

    第二种情况:

    short a = 1;
    a += 1;
    System.out.print(a);
    

    这种情况不会报错。
    java语言规范中关于复合赋值的解释是这样的:E1 op= E2等价于
    E1=(T)(E1 op E2),这里的T是E1的数据类型,即复合赋值是自带了隐式的强制类型转换的

    第三种情况:

    short a = 1;
    short b = 1;
    short c = a + b;
    

    这种情况依然会编译出错,因为Java中存在的类型升级,导致两个short类型的运算也会转换成int进行。

    类型升级

    在Java中,对基本数据类型做比较或者运算时,如果两边的数据类型不同,在可以比较的前提下会首先进行类型升级

    • 如果任一方为double,则另一方转换为double
      • 否则如果任一方为float,则另一方转换为float
        • 否则如果任一方为long,则另一方转换为long
          • 否则两边都会转换为int

    即从高到低分别为doublefloatlongint
    即使是两个short类型运算,也会转换成int进行,这就是前面第三种情况出现错误的原因。


      1. 参考https://blog.csdn.net/allenjay11/article/details/78613862 ↩︎

  • 相关阅读:
    todo-list
    codeforces 794 (#414 DIV1+DIV2)
    2018bnu校赛总结
    codeforces 743D
    HDU-2196 Computer (树形DP)
    HDU- 1005 Number Sequence(矩阵快速幂)
    HDU- 4000 Fruit Ninja(树状数组)
    codeforces 505C
    codeforces 286B
    codeforces 3D
  • 原文地址:https://www.cnblogs.com/zjwoo/p/13717354.html
Copyright © 2011-2022 走看看