首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java隐式转换

Java隐式转换
EN

Stack Overflow用户
提问于 2015-08-28 01:26:35
回答 2查看 362关注 0票数 6

使用以下代码:

代码语言:javascript
复制
Float a = 1.2;

这里有一个错误,因为它接受小数作为双精度值,并且double是比float更大的数据类型。

现在,它接受integer作为默认的int类型。那么,为什么下面的代码没有给出任何错误呢?

代码语言:javascript
复制
Byte b = 20;
EN

回答 2

Stack Overflow用户

发布于 2015-08-28 01:30:40

编译器足够聪明,能够计算出位表示为20 (一个int值)可以在不丢失数据的情况下适合byte。从Java Language Specification §5.1.3

doublefloat的缩窄基元转换受IEEE754舍入规则(§4.2.4)管理。此转换可能会丢失精度,但也会丢失范围,从而导致非零双精度的float零和有限双精度的float无穷大。将double NaN转换为float NaN,并将double无穷大转换为相同符号的float无穷大。

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

另请参见this thread

票数 7
EN

Stack Overflow用户

发布于 2015-08-28 01:48:12

一般情况下没有隐式的缩小转换-常量表达式是唯一的例外,JLS 5.2明确允许它们:

此外,如果表达式是字节、短整型、整型字符或整型整型的常量表达式(§15.28):

**如果变量的类型是字节、短整型或字符型,并且常量表达式的值可以在变量的类型中表示,则可以使用缩小基元转换。

没有提到允许对浮点数进行隐式缩小转换,因此根据一般规则,它们是被禁止的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32255812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档