Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的升级和转换_Java_Casting_Type Promotion_Type Narrowing - Fatal编程技术网

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;//允许铸造,但不要求铸造