java - 在 Java 中的正面和负面情况下如何发生类型扩展?
问题描述
在正数和负数的情况下,类型转换的发生方式有什么区别吗?
例如,如果我们有
short a = 100;
并把它放到
int b = a;
如果我们将“100”更改为“-100”,会有什么不同吗?我试图找到它在 IDEA 中编译,但没有发现差异,但我的导师有这个问题。
解决方案
免责声明:由于这是一个家庭作业问题,我在这里所说的可能不是“预期”的答案。
这里涉及到两个转换。第一个是从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 的位数。除了可能丢失有关数值大小的信息之外,这可能会导致结果值的符号与输入值的符号不同。
两者-100
和100
都可以用 表示short
,其范围是 -65536...65535,因此这里也不会丢失任何信息。
简而言之,无论你使用100
or -100
,结果都会分别b
存储100
or的值-100
。
推荐阅读
- html - 在 mvc razor 上的 href 中解析错误“/@”
- php - 如果用户的时区使用 PHP 更改,如何处理存储在数据库中的用户数据
- docker - Kibana Docker“这可能需要几分钟”但从不启动
- arrays - 将数组存储在数据库 Wordpress 中
- javascript - Javascript - 将分隔文本拆分为列
- c# - c# "is" 与存储在变量中的类型比较 --
- android - 棒棒糖前的矢量可绘制崩溃
- xamarin - 如何在 ViewCellRenderer Xamarin.Forms 中获取按钮单击事件
- azure-devops - VSTS - 测试 -> 运行 -> 查询端点未根据参数进行过滤
- asp.net-core - 具有招摇属性的 CreatedAtRouteResult