Eclipse错误?仅在默认情况下打开null

Eclipse错误?仅在默认情况下打开null,第1张

Eclipse错误?仅在默认情况下打开null

这是一个错误。这是

switch
根据 Java语言规范,第三版 的声明的指定行为:

[JLS 14.11

switch
声明](http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.11)

SwitchStatement:    switch ( expression ) SwitchBlock

switch
执行该语句时,首先对
expression
进行评估。如果结果
expression
null
NullPointerException
则抛出a
,并且由于
switch
这个原因,整个语句突然完成。

显然,Eclipse中的错误与

default
大小写无关
enum

public class SwitchingonAnull {    public static void main(String[] args) {     java.math.RoundingMode x = null;        switch(x) {};        switch((Integer) null) {};        switch((Character) null) { default: System.out.println("I've got sunshine!");        }}}

上面的代码在Eclipse(至少是某些版本)上编译并运行“精细”。使用编译时,每个人都会

switch
抛出一个,这完全符合规范的要求。
NullPointerException``javac


原因

这是

javap -c SwitchingOnAnull
在Eclipse下编译时的:

Compiled from "SwitchingOnAnull.java"public class SwitchingonAnull extends java.lang.Object{public SwitchingonAnull();Code: 0: aload_0 1: invokespecial  #8; //Method java/lang/Object."<init>":()V 4: returnpublic static void main(java.lang.String[]);Code: 0: aconst_null 1: astore_1 2: getstatic     #16; //Field java/lang/System.out:Ljava/io/PrintStream; 5: ldc#22; //String I've got sunshine! 7: invokevirtual #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)V10: return}

看来Eclipse编译器

switch
完全摆脱了整个构造。不幸的是,这种优化违反了语言规范。


官方话

该错误已归档并已分配修复。

奥利维尔·托曼(Olivier Thomann)2010-05-28 08:37:21

我们在优化上过于激进。

对于:

  switch((Integer) null) {};

我们

switch
至少应该评估表达式时才能优化整个语句。

我会看一看。

3.6.1的候选人。

也可以看看
  • 错误314830-打开
    null
    表达式并不总是抛出
    NullPointerException


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5601376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存