java中的升级和转换
升级意味着将较小的类型文字升级或转换为较高的类型。此提升用于计算表达式。现在我对此有点怀疑。当我键入此语句时java中的升级和转换,java,casting,type-promotion,type-narrowing,Java,Casting,Type Promotion,Type Narrowing,升级意味着将较小的类型文字升级或转换为较高的类型。此提升用于计算表达式。现在我对此有点怀疑。当我键入此语句时 byte var1 = 56 + 10; 答案是66。这怎么可能呢? 根据提升规则,每个字节、short和char都被提升为int。因此,56和10将被提升为int,因此答案66将是int。这66将存储在字节类型的变量中。然而,要存储从int到byte的内容,需要进行转换。但此代码在无需强制转换的情况下可以完美工作。在许多情况下,可以在以下文件中找到: 此外,如果表达式是类型为byte
byte var1 = 56 + 10;
答案是66。这怎么可能呢?
根据提升规则,每个字节、short和char都被提升为int。因此,56和10将被提升为int,因此答案66将是int。这66将存储在字节类型的变量中。然而,要存储从int到byte的内容,需要进行转换。但此代码在无需强制转换的情况下可以完美工作。在许多情况下,可以在以下文件中找到: 此外,如果表达式是类型为
byte
、short
、char
或int
的常量表达式():
- 如果变量的类型为
、byte
或short
,并且常量表达式的值可以用变量的类型表示,则可以使用缩小原语转换char
int
,然后缩小到目标类型,因为66确实可以在目标类型(即字节)中表示
请注意,这仅适用于常量表达式。例如,以下代码产生编译时错误:
static int get() {
return 10;
}
public static final main(String[] args) {
byte var1 = 56 + get();
}
在许多情况下,这一点可以在以下方面找到: 此外,如果表达式是类型为
byte
、short
、char
或int
的常量表达式():
- 如果变量的类型为
、byte
或short
,并且常量表达式的值可以用变量的类型表示,则可以使用缩小原语转换char
int
,然后缩小到目标类型,因为66确实可以在目标类型(即字节)中表示
请注意,这仅适用于常量表达式。例如,以下代码产生编译时错误:
static int get() {
return 10;
}
public static final main(String[] args) {
byte var1 = 56 + get();
}
这没关系,因为你给的是常量值。看 常量的编译时收缩意味着以下代码: 字节theAnswer=42 是允许的。如果不缩小范围,整数文本42的类型为int,这意味着需要转换为byte: 字节答案=(字节)42;//允许铸造,但不要求铸造
这没关系,因为你给的是常量值。看 常量的编译时收缩意味着以下代码: 字节theAnswer=42 是允许的。如果不缩小范围,整数文本42的类型为int,这意味着需要转换为byte: 字节答案=(字节)42;//允许铸造,但不要求铸造