首页 > 解决方案 > 在 Java 中的正面和负面情况下如何发生类型扩展?

问题描述

在正数和负数的情况下,类型转换的发生方式有什么区别吗?

例如,如果我们有

short a = 100;

并把它放到

int b = a;

如果我们将“100”更改为“-100”,会有什么不同吗?我试图找到它在 IDEA 中编译,但没有发现差异,但我的导师有这个问题。

标签: javatypestype-conversion

解决方案


免责声明:由于这是一个家庭作业问题,我在这里所说的可能不是“预期”的答案。

这里涉及到两个转换。第一个是从int(文字100计算为 type 的值int)到的缩小原始转换short。第二个是从short到的扩展原始转换int

根据 JLS §5.1.2 ,第二次转换永远不会丢失信息:

在以下情况下,加宽基元转换不会丢失有关数值整体大小的信息,其中数值被精确保留:

  • 从一个整数类型到另一个整数类型

  • 从 byte、short 或 char 到浮点类型

  • 从 int 到 double

  • 在 strictfp 表达式中从 float 到 double(第 15.4 节)

根据 JLS §5.1.3 ,第一次转换是这样完成的

有符号整数到整数类型 T 的窄化转换只会丢弃除 n 个最低位之外的所有位,其中 n 是用于表示类型 T 的位数。除了可能丢失有关数值大小的信息之外,这可能会导致结果值的符号与输入值的符号不同。

两者-100100都可以用 表示short,其范围是 -65536...65535,因此这里也不会丢失任何信息。

简而言之,无论你使用100or -100,结果都会分别b存储100or的值-100


推荐阅读