从高性能的角度来看,调用外部类static
方法比在同一个类中调用static
方法要慢?
答案 0 :(得分:2)
不,永远不会。将方法可见性分开,静态方法只是C语义中的全局函数。因此,它们属于什么类别,甚至在Android上都不重要。
答案 1 :(得分:0)
这取决于。请考虑以下事项:
public class Outer {
/*private*/ static void outerMethod() {
// do stuff
}
static class Inner {
public void doStuff() {
outerMethod();
}
}
}
doStuff()
方法的字节码如下所示:
0: invokestatic #2 // Method Outer.outerMethod:()V
3: return
但是,如果我们将outerMethod()
设为私有,则代码将显示为:
0: invokestatic #2 // Method Outer.access$000:()V
3: return
问题是内部类不能直接调用外部类方法,因为它是私有的。编译器通过创建合成access$000()
方法来解决此问题,该方法除了调用outerMethod()
之外什么都不做。除非AOT或JIT编译器识别出模式并将其优化,否则调用访问器方法的速度会慢一些。
因此,如果它也被声明为私有,则调用外部类静态方法可能会慢
。