将int文字分配给字节变量时是否需要强制转换?

时间:2017-09-26 16:07:34

标签: java

我读了一本书:

byte rounds = 12, fighters = (byte) 2;

说明

  

字节原语有一个四字节有符号整数作为有效字节   文字。如果未执行显式强制转换,则整数为   隐式地转换为一个字节。

根据Oracle doc,一个字节本质上应该是一个字节吗?

3 个答案:

答案 0 :(得分:1)

Java提供了用于初始化基元数据类型的特殊文字,例如

int a = 1234;
double b = 12.34;
float c = 56.78f;
char d = 'x';

文档说明byte类型没有特殊字面值。相反,原始类型byteint共享其文字。当有符号的32位int字面“适合”单个字节时,Java将执行隐式转换;否则,它将产生编译时错误。

答案 1 :(得分:0)

一个字节是一个字节。但是文字12是整数类型,它是4个字节。这句话说的是当你写byte rounds = 12时,存在一个隐式转换,将整数12变换为一个字节。

答案 2 :(得分:0)

  

如果未执行显式转换,则整数将隐式转换为一个字节。

如果一本书说了这句话,那是不正确的。至少,这并不能说明全部情况。

(从技术上讲,这些转换不是强制转换。强制转换涉及Java (<type>)语法。)

关于隐式缩小转化的整个故事如下:

  • 它们仅适用于分配环境;参见JLS 5.2
  • 它们仅在要转换的值是(编译时)常量表达式时适用;参见JLS 15.28
  • 仅当值类型为bytecharshortint时才适用
  • 仅当目标类型为bytecharshort或相应的包装器类型(ByteCharacter和{{1 }}。
  • 仅当值将“适合”目标类型且不被截断时,它们才适用。

例如:

Short