gpt4 book ai didi

java - Java 编译器是否会针对手动重载决议优化远离类型转换?

转载 作者:行者123 更新时间:2023-11-29 08:09:54 25 4
gpt4 key购买 nike

给定以下代码:

class C {
static void m(String s) { ... } // 1
static void m(Object o) { ... } // 2

public static void main(String[] args) {
m( (Object) "test"); // call m version 2
}
}

Java 编译器是否会优化对 Object i main 的转换,以便这种“手动重载解析”不会产生性能开销?或者实际的运行时执行是否仍会执行转换?

最佳答案

该调用是在编译 时选择的。所以这不是优化,而是编译器本身选择调用哪个方法。强制转换是为了帮助编译器,不会影响运行时性能。

这与重写不同,在重写中被调用的对象在运行时指示方法,例如

shape.getArea(); // determined by whether shape is a square, circle etc.

如果您使用/不使用转换来编写上面的代码并生成字节码 (javap -verbose -c C),您将在生成的代码中看到这种差异:

<    2: invokestatic    #7; //Method m:(Ljava/lang/Object;)V
---
> 2: invokestatic #7; //Method m:(Ljava/lang/String;)V

即编译器只是选择了不同的方法(const #7 将在每种情况下发生变化以反射(reflect)不同的方法)。

关于java - Java 编译器是否会针对手动重载决议优化远离类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724792/

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