Java中的数字是否有默认类型

col*_*ind 3 java types integer default numbers

如果我写这样的东西

System.out.println(18);
Run Code Online (Sandbox Code Playgroud)

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

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

byte b = 3;
Run Code Online (Sandbox Code Playgroud)

这是不正确的:

int i = 3;
byte bb = i; //error!
Run Code Online (Sandbox Code Playgroud)

编辑:我想我在Assignment Conversion的规范中找到了正确的部分:

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

byte theAnswer = 42;

被允许.如果没有缩小,整数文字42的类型为int的事实意味着需要转换为字节:

byte theAnswer =(byte)42; //允许施放但不是必需的

Sot*_*lis 6

这个

18
Run Code Online (Sandbox Code Playgroud)

被称为整数文字.有各种各样的文字,浮点String,字符等.

在下面的,

byte b = 3;
Run Code Online (Sandbox Code Playgroud)

文字3是整数文字.它也是一个不变的表达.并且由于Java可以说它3适合a byte,它可以安全地应用缩小的原始转换并将结果存储在byte变量中.

在这

int i = 3;
byte bb = i; //error!
Run Code Online (Sandbox Code Playgroud)

文字3是一个常量表达式,但变量i不是.编译器只是简单地决定,因为i它不是一个常量表达式,因此不会试图找出它的值,转换为byte可能会丢失信息(如何转换12345byte?),因此不应该被允许.您可以通过创建i常量变量来覆盖此行为

final int i = 3;
byte bb = i; // no error!
Run Code Online (Sandbox Code Playgroud)

或者通过指定显式的演员表

int i = 3;
byte bb = (byte) i; // no error!
Run Code Online (Sandbox Code Playgroud)