【问题标题】:Why can't i cast (byte) Data Type into (short) Data Type in Java为什么我不能在 Java 中将(字节)数据类型转换为(短)数据类型
【发布时间】:2020-12-25 12:27:27
【问题描述】:

所以,实际上我还是 Java 编程语言的新手,还在学习转换数据类型所以在这种情况下,我在将 Byte 转换为 Short 时遇到了麻烦。你们能帮帮我吗??

public class Main {
    public static void main(Strings[] args) {
        int number = 2;
        long updateNumber = number + 2;
        System.out.println(updateNumber); //output : 4
    }
}

所以在这种情况下,我可以正常地从 (int) 转换为 (long) 数据类型,因为 (long) 数据大小大于 (int)。这与我尝试将其从 (short) 转换为 (int) 时的情况相同。但是为什么我不能使用这个概念将数据类型从(字节)转换为(短)?尽管 (short) 的数据大小大于 (byte)??

public class Main {
    public static void main(Strings[] args) {
        byte number = 2;
        short updateNumber = number + 2;
        System.out.println(updateNumber); //output : Error
    }
}

我想就是这样..抱歉给您带来麻烦,谢谢您嘿嘿..

【问题讨论】:

  • 因为加法是用数据类型int2是一个int字面量),而int大于short。同样为了使术语正确,这些示例中不涉及强制转换。
  • 啊,我明白了.. 我认为这被称为隐式转换.. 和.. 啊.. 我明白了。如果大小更小,每个数学表达式(+,- 等)是否会将数据类型转换为`int`? @亨利

标签: java types casting byte


【解决方案1】:

当我们添加两个byte 类型变量或byte 类型变量和int 类型变量时,结果会自动转换(隐式转换)为int。所以如果我们想把加法的结果赋值给一个短类型变量,编译器会报错。

虽然您可以通过显式转换将其分配给短类型变量。

public static void main(String[] args) throws MyException {
        byte number = 2;
        //Explicit casting
        short updateNumber = (short) (number + 2);

        System.out.println(updateNumber); // output : Error
}

加法的结果可能会溢出,因为这里的数字变量值可以在运行时更改。因此,如果您将数字声明为最终数字并且数字的加法适合字节范围,那么您将不需要进行显式转换,因为编译器会提前知道加法的结果是否可以按字节保存。

public static void main(String[] args) throws MyException {
        final byte number = 2;
        //Explicit casting not needed as number is final
        short updateNumber = number + 2;
    
        System.out.println(updateNumber); // output : Error
 }

【讨论】:

  • 啊..我明白了..如果我错了,请纠正我。那么,这里的 (number+2) 数据类型实际上是整数类型吗?但是因为您明确更改为短类型,所以它会更改正确???是不是因为 (+ 2) 首先是 int 类型??
  • 是的,因为如果结果值溢出,现在您将负责此转换。以及如果您将变量 number 声明为 final 并且结果可以按字节保存,那么您甚至不需要进行显式转换。
  • 啊,我明白了...所以,只要它仍在某些类型的范围内,您就不需要显式转换...谢谢
猜你喜欢
  • 2010-10-18
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
相关资源
最近更新 更多