gpt4 book ai didi

java - 为什么 `switch(null)` 是编译错误,但 `switch(str)` 与 str 是 `static final String str = null;` 没问题?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:06 28 4
gpt4 key购买 nike

虽然 switch(null) 是一个编译错误,但是 switch(str) 没问题(strstatic final String str = 空;)。

static final String str = null; 不是一个编译时常量,应该在编译时代入 switch(str),因此等同于 开关(空)

switch (null) {  // compile Error immediately!

}

但是:

public class Test {

// compile-time constant?
static final String s4 = null;

public static void main(String[] args) {

switch (s4) { // compiles fine! NPE at runtime

}
}
}

附言我想 static final String str = null; 不是编译时常量,因为只有 static final String str = 'string literal' 是编译时常量常量,它解释了上面的示例 (s4)。

最佳答案

来自错误信息:

Incompatible types. Found 'null', required: 'char, byte, short, int, Character, Byte, Integer, String, or an enum'

你可以看到 null 被推断为空,它甚至不是一个 Object,它只是“空类型”,并且不是 String(或任何其他有效的可切换类型)。

因此,要编译它,您需要将其转换为 String(或其他有效类型之一)。

switch((String) null) {

然后当您尝试执行它时抛出 RuntimeException

此行为不仅适用于 switch,实际上与您执行此操作时相同:

null.isEmpty()

java 应该如何知道您要调用 String#isEmpty()?您也可以指 Collection#isEmpty()。或任何其他 isEmpty() 方法。 switch 示例也是如此,java 根本不知道您指的是哪种类型。

关于java - 为什么 `switch(null)` 是编译错误,但 `switch(str)` 与 str 是 `static final String str = null;` 没问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440311/

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