gpt4 book ai didi

java - switch 语句中的包装

转载 作者:行者123 更新时间:2023-12-01 22:36:11 25 4
gpt4 key购买 nike

我对 switch 语句中的对象有疑问。我知道 case 子句中使用的变量必须是最终的(否则我们会得到:“case 表达式必须是常量表达式”)。对象上的 Final 意味着只有引用不能更改,该值仍然可以被其他非 Final 引用更改,因此,我们不能在“case”中使用对象。
但为什么我们不能使用包装器呢?它们是不可变的,不是吗?

java代码:

    Integer i = 8;
final int x = 10;

switch ( x )
{
case x:
System.out.println("x");
break;
case i:
System.out.println("i");
break;
}

最佳答案

你的变量i是对Integer对象的引用。

Integer 对象是不可变的。

变量i本身是一个对象的可变引用。它不是一个常量,它必须是最终的并且是原始类型或字符串类型。

编辑:终于在Java语言规范中找到了引用。

首先,开关标签可以包含枚举或常量表达式,如 14.11: The switch statement

SwitchLabel:
case ConstantExpression :
case EnumConstantName :
default :

15.28: Constant expressions 中定义了常量表达式。 。本例中的相关项目是:

Simple names (§6.5.6.1) that refer to constant variables (§4.12.4).

常量变量由 4.12.4: final variables 定义

A constant variable is a final variable of primitive type or type String that is initialized with a constant expression (§15.28).

关于java - switch 语句中的包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26850261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com