Java Compiled While 循环看起来不同

标签 java java-7

我正在使用 java 7 update 26。我有一个类,其中有一个 while 循环。当我使用 jd-gui ( http://java.decompiler.free.fr/?q=jdgui ) 反编译该 .class 文件时,它给了我一些奇怪的 while 循环。

try {
  while (true) {
    c = in.read();
    if ((c >= '0' && c <= '9') || c == '-' || c == '+')
    {
      numBuf[len++] = (char) c;
    } else if (c == '.' || c == 'e' || c == 'E') {
      numBuf[len++] = (char) c;
      isFloat = true;
    } else if (c == -1) {
      throw new IOException("EOF");
    } else {
      in.unread(c);
    }
  }
} catch (ArrayIndexOutOfBoundsException e) {
  throw new IOException("Exception with Array ");
}

编译后的版本如下:

try {
  while (true) {
    c = in.read();
    if (((c >= 48) && (c <= 57)) || (c == 45) || (c == 43))
    {
      numBuf[(len++)] = (char)c;
      continue; 
    } 
    if ((c != 46) && (c != 101) && (c != 69))
      break;
    numBuf[(len++)] = (char)c;
    isFloat = true;
  }
  if (c == -1) {
    throw new IOException("EOF");
  }
    in.unread(c);      
} catch (ArrayIndexOutOfBoundsException localArrayIndexOutOfBoundsException) {
    throw new IOException("Exception with Array ");
}

我的代码看起来完全不同..有什么想法吗?

最佳答案

将“X”替换为 ASCII 代码以提高性能。

并且将 if/else 更改为 continue/break 以减少比较,仍然是为了性能。

关于Java Compiled While 循环看起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18458583/

相关文章:

java - 如何在 Java 中预加载 AudioClip

java - 谷歌 Guava : Predicate assertTrue

java - 为什么spring 4推荐使用注解而不是配置文件?

java - 有效地将java字符串转换为其等效的枚举

javascript - 在 Java 7 上运行符合 ECMAScript 5 的 javascript

java - 机器人框架 : why suite setup seems not to be working properly?

java - 在java中打印文本文件中的输出

java - 降级 Eclipse ant 以在使用较旧的 JDK 库时进行编译 (Java 1.7 -> 1.6)

java - 指定的 JRE 安装不存在

java - 如何在java中优化素数生成器?