Java中有默认的数字类型吗

2024-06-20

如果我写这样的东西

System.out.println(18);

哪种类型有“18”? 是吗int or byte? 或者它还没有类型?

它不能是 int,因为这样的东西是正确的:

byte b = 3;

这是不正确的:

int i = 3;
byte bb = i; //error!

编辑: 我想我在规范中找到了正确的部分分配转换 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.2 :

常量的编译时缩小意味着诸如以下的代码:

字节答案 = 42;

被允许。如果没有缩小范围,整数文字 42 具有 int 类型这一事实意味着需要强制转换为 byte:

字节答案 = (字节) 42; // 允许强制转换,但不是必需的


This

18

被称为整数字面量 http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1。各种各样的都有literals http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10, 浮点,String、性格等

在下面的,

byte b = 3;

字面意思3是一个整数文字。这也是一个常量表达式。因为 Java 可以告诉我们3适合一个byte,它可以安全地应用缩小原始转换 http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.3并将结果存储在byte多变的。

In this

int i = 3;
byte bb = i; //error!

字面意思3是一个常量表达式,但是变量i不是。编译器只是简单地决定i不是常量表达式,因此不会特意计算其值,转换为byte可能会丢失信息(如何转换12345 to a byte?)因此不应被允许。您可以通过以下方式覆盖此行为i常量变量

final int i = 3;
byte bb = i; // no error!

或者通过指定显式强制转换

int i = 3;
byte bb = (byte) i; // no error!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中有默认的数字类型吗 的相关文章

随机推荐