我想知道Java如何处理以下情况:
假设我有一个名为Debug的类,它看起来像这样:
public class Debug { private static final boolean isAssertEnabled = true; public static void assertTrue(boolean b, String errorMessage) { if (isAssertEnabled) { if (!b) { throw new RuntimeException(errorMessage); } } } }
并假设我的代码有一个看起来像这样的调用:
... Debug.assertTrue((x + y != z) && (v - u > w), "Some error message"); ....
我有几个问题:
感谢您的帮助!
布尔表达式的求值 不应 编译掉-至少由javac编译。
即使 当前Debug该类文件不使用该值,在执行时还是会这样吗? __
Debug
在使Debug类编译(通过使isAssertEnabled静态)后,javac仍然包含代码- 但我希望JIT编译器将其删除(尽管您应该看到Peter引用的问题)。我不确定是否可以将该方法内联为零。同样,如果JIT编译器可以做到这一点,并且 如果 意识到对参数进行评估不会有任何副作用,则它有可能避免评估。不过,我不会亲自编写代码。
isAssertEnabled