java - Java 编译器会优化对最终静态变量的方法调用吗?当它变成 dalvik 代码时会发生什么?

标签 java android javac compiler-optimization dalvik

我有以下代码

 float square(float val) { return val*val;}
 boolean isInCircle(final float x,final float y) {

        float squareDistance = square(cx - x) + square(cy - y);
        return squareDistance < square(RADIUS);
    }

RADIUS 是一个static final float

Java 编译器会优化调用 square(RADIUS) 吗?

当它转换为 androiddalvik 代码时会发生什么?它会保持优化吗?

最佳答案

Java 编译器不会对该代码执行任何操作。

HotSpot JVM 几乎肯定会预先计算平方 (RADIUS)。

Android 没有那个特定的 JVM。

我个人根本不会写 square() 方法,只是 return (cx-x)*(cx-x)+(cy-y)*(cy-y) < RADIUS*RADIUS;并让编译器/JVM 从那里开始战斗。但后来我是一名数学家 ;-)

关于java - Java 编译器会优化对最终静态变量的方法调用吗?当它变成 dalvik 代码时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11445996/

相关文章:

java - 在哪里可以找到 Java 8 版本的 JVM 规范?

java - ProGuard 破坏 JavaFX 应用程序

java - JSOUP 无法在 Android Studio 中提取动态生成的 DOM 内容

java - 如果我的大部分 Activity 方法都是私有(private)的,如何在 Android 中实践 TDD?

android - 如何从一个 Activity 调用非静态方法到另一个 Activity

java - Java 是否将除以 2 的幂的除法优化为位移位?

java - Netbeans javac 在 LayerGenerateProcessor 中为 @Override 抛出异常。问题出在哪里?

java - JUnits 4 运行时没有任何类级别注释?我在这里缺少什么?

java - Android:使用 Lambda 间隔执行 runnable

android - 如何在android中倾斜布局?