Java中是否存在数字的默认类型

问题描述 投票:3回答:2

如果我写这样的东西

System.out.println(18);

哪种类型带有'18'?是int还是byte?还是还没有类型?

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

byte b = 3;

这是不正确的:

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

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

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

byte theAnswer = 42;

被允许。如果不进行缩小,则整数文字42具有int类型的事实意味着将需要强制转换为字节:

byte theAnswer =(byte)42; //允许但不是强制转换

java types numbers integer default
2个回答
7
投票

18

被称为integer literal。有各种各样的literals,浮点数,String,字符等。>

在下面,

byte b = 3;

文字3是整数文字。这也是一个常量表达式。并且由于Java可以告诉3适合byte,因此它可以安全地应用narrowing primitive conversion并将结果存储在byte变量中。

在此

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

文字3是一个常量表达式,但变量i不是。编译器只是简单地确定i不是常数表达式,因此不会竭尽全力找出其值,到byte的转换可能会丢失信息(如何将12345转换为byte ?),因此不应允许。您可以通过使i为常量变量来覆盖此行为

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

或通过指定显式强制转换

int i = 3;
byte bb = (byte) i; // no error!

© www.soinside.com 2019 - 2024. All rights reserved.