Java中是否有数字的默认类型
如果我写这样的东西
System.out.println(18);
哪种类型有“18”? 是int还是字节? 还是它还没有定型
它不可能是int,因为这样是正确的:
byte b = 3;
这是不正确的:
int i = 3;
byte bb = i; //error!
编辑: 我想我在Assignment Conversion的规范中找到了正确的部分:
The compile-time narrowing of constants means that code such as:
byte theAnswer = 42;
is allowed. Without the narrowing, the fact that the integer literal 42 has type int would mean that a cast to byte would be required:
byte theAnswer = (byte) 42; // cast is permitted but not required
# 1 楼答案
这个JLS-4.2.1 - Integral Types and Values
和JLS-3.10.1 - Integer Literals
最后,JLS-3.10.2 - Floating-Point Literals包括
至于
byte b = 3;
,它是从int
到byte
的Narrowing Conversion# 2 楼答案
正如其他人所说,它是一个整数文本
在幕后,Java似乎是为32位处理器编写的。 一个整数介于+/-~214.7万之间,即2^31,带一个标志位
所以无论你是写一位还是一个完整的int,它都是一个单处理器函数,因此是一个单内存分配
# 3 楼答案
这个
被称为integer literal。有各种各样的literals、浮点、
String
、字符等等在下文中
文本
3
是一个整数文本。这也是一个恒定的表达式。由于Java可以判断3
适合byte
,因此它可以安全地应用narrowing primitive conversion并将结果存储在byte
变量中在这个
文字
3
是一个常量表达式,但变量i
不是。编译器只是决定i
不是一个常量表达式,因此不会特意计算它的值,对byte
的转换可能会丢失信息(如何将12345
转换为byte
?)因此不应该被允许。可以通过将i
设为常量变量来覆盖此行为或者通过指定显式强制转换