为什么我无法使用短变量进行数学运算?

问题描述 投票:0回答:2
short s1 = 4500, s2 = 9800;
short s3;
s3 = s2 - s1;
System.out.println("The difference is:- " + s3);

我运行了这段代码,它显示了一个错误,但当我将 s3 声明为 int 时,它工作得很好。为什么会发生这种情况? 显示的错误如下:- ''' Main.java:15:错误:不兼容的类型:从 int 到 Short 可能有损转换 s3 = s2 - s1; ^ 1 个错误 '''

我尝试运行代码,我认为代码会运行。但在数学运算中它显示错误并建议使用 int 变量而不是短字节变量。

java math integer byte short
2个回答
0
投票

16 位变量对于常见的 32 位 CPU 寄存器来说具有“不自然”的大小。所以如果你想做一些算术运算,不仅仅是存储,你必须将变量转换为default类型。

short s1 = 9800;
short s2 = 4500;
int temp = s2 - s1;
short s3 = (short) temp;

0
投票

在Java中,当您对基本数据类型(例如本例中的shorts)执行算术运算时,在执行操作之前,结果值会自动提升为至少一个int。这称为“整数提升”。这样做是为了防止直接使用较小的数据类型(如短整型或字节)执行操作时可能发生的潜在数据或精度丢失。

试试这个:

    short s1 = 3, s2 = 4;
    short s3;
    s3 = (short)(s2 - s1);

通过在减法之前添加 (short),您可以告诉 Java 将减法作为 int 执行,然后将结果显式转换回 Short。请注意,如果减法结果超出短路范围,您可能会丢失数据或遇到意外行为。

© www.soinside.com 2019 - 2024. All rights reserved.