为什么我们不写s
这样的短数据类型,比如short s = 2s;
,因为我们用float来写float f = 1.23f
?为什么我们不为短类型添加“s”后缀?
我知道当我们写float
默认情况下,编译器将其视为double
和分配8个临时字节给它,当它试图复制8字节float
的4,结果在一个类型的错误,所以这是为什么我们在初始化一个float
后编写f
,但为什么我们不按照默认的字面类型做类似short
?
为什么我们不写s
这样的短数据类型,比如short s = 2s;
,因为我们用float来写float f = 1.23f
?为什么我们不为短类型添加“s”后缀?
我知道当我们写float
默认情况下,编译器将其视为double
和分配8个临时字节给它,当它试图复制8字节float
的4,结果在一个类型的错误,所以这是为什么我们在初始化一个float
后编写f
,但为什么我们不按照默认的字面类型做类似short
?
这是因为从double到float会截断值并丢失数据,所以编译器不会自动执行该操作,您必须明确地告诉它。但是,当从较小的尺寸,较短的尺寸,到较大的尺寸int时,它会自动完成,因为编译器只需填充数据并且没有潜在的数据丢失,而不是前一种情况。
对于长文字,Java语言规范允许类型后缀L
或l
。但是,它不提供短值的类型后缀。这不是必需的,因为:
int
表示。甲基本收缩转换。
Thomus先生然后还可以由浮点数表示的任何值也可以由默认类型double?表示。 – PVP
@PVP请参阅https://stackoverflow.com/a/14103012/3788176 –
为什么我们不给short类型添加“s”后缀?
因为Java语言在这一点上是不一致的。
JLS的是没有浮动数字原始类型更加灵活,因为浮动数字基本类型:
此外,如果表达式是 类型字节的恒定表达(§15.28) ,short,char或int:
如果变量 的类型是byte,short或char,并且常量012的值可能会使用缩小基元转换表达式可以表示变量的类型。
我认为在这样做byte, short, char, or int
和float and double
区分声明和操纵它们是不是真的需要。它会在使用它们时造成不一致和潜在的错误。
如果short s = 10;
是有效的,因为窄化原语转换由编译器确认它没有丢失信息,所以float f = 10.0;
也会因为完全相同的原因而有效。
我们也来自int默认情况下默认情况下int literal是我认为的标准 – PVP
但是,一个短变量可以分配给int文本。例如,“short s = 32767”。这从一种较大的尺寸变为一种较小的尺寸。编译器似乎正在查看右侧int的实际值,因为不接受“short t = 32768”。 –
@AndyThomas啊,没有看到它的应用程序。 –