为什么可以';在Java中,我将(字节)数据类型转换为(短)数据类型

为什么可以';在Java中,我将(字节)数据类型转换为(短)数据类型,java,types,casting,byte,Java,Types,Casting,Byte,所以,实际上我还是Java编程语言的新手,还在学习转换数据类型,所以在本例中,我很难将字节转换为短字节。你们能帮帮我吗 public class Main { public static void main(Strings[] args) { int number = 2; long updateNumber = number + 2; System.out.println(updateNumber); //output : 4 }

所以,实际上我还是Java编程语言的新手,还在学习转换数据类型,所以在本例中,我很难将字节转换为短字节。你们能帮帮我吗

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)时的情况相同。但为什么我不能使用这个概念将数据类型从(字节)转换为(短)??即使(短)的数据大小大于(字节)


我想就是这样。。很抱歉给您带来麻烦,谢谢您。当我们添加两个
byte
类型变量或
byte
类型变量与
int
类型变量时,结果将自动转换(隐式转换)到
int
。因此,如果我们想将加法的结果赋给一个短类型变量,编译器将给出错误

而您可以通过显式转换将其分配给short-type变量

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

        System.out.println(updateNumber); // output : Error
}
由于加法的结果可能会溢出,因为这里的数字变量值可以在运行时更改。所以,如果您将数字声明为final,并且数字的加法符合字节范围,那么您就不需要执行显式强制转换,因为编译器将提前知道加法的结果是否可以按字节保存

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
 }

因为加法是使用数据类型
int
2
是一个int文本)执行的,
int
大于
short
。另外,为了使术语正确,这些示例中没有涉及铸造。啊,我明白了。。我认为这就是所谓的隐式铸造。。还有。。。。啊。。我明白了。如果大小较小,那么每个数学表达式(+、-etc)都会将数据类型转换为“int”@亨利。。我懂了。。如果我错了,请纠正我。那么,这里的(number+2)数据类型实际上是整数类型吗?但是因为您显式地更改为short类型,所以它会更改,对吗???这是因为(+2)首先是int类型吗?是的,因为现在如果结果值溢出,您将负责此强制转换。还有,如果你声明变量号为final,结果可以按字节保存,那么你甚至不需要进行显式转换。啊,我明白了。。。soo,只要它还在某些类型的范围内,你就不需要显式转换。。。明白了谢谢
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
 }