作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设这里所有的方法调用都是静态的,像这样:
public class Util {
public static void method1() {
}
}
以静态方式访问:
Util.method1();
Util.method2();
Util.method3();
以非静态方式访问
Util util = new Util();
util.method1();
util.method2();
util.method3();
这两种方式在性能上有什么不同吗?我知道在这里做这件事的第一种方法是正确访问它。但是第二种方法只实例化 util 对象一次而不是三次。除了正确访问这些方法之外,我找不到任何指向任何东西的东西。据我所知,没有功能上的区别,而是逻辑上的区别。如果有人知道,请寻找任何一种方式的成本与 yield 。
最佳答案
Is there any performance difference for either way?
是的——第二个稍微慢一些,因为正在构建一个毫无意义的实例。
I know the first way of doing it here is accessing it properly. But the second way only instantiates the util object once as opposed to three times.
不,第二种方法创建一个 Util
实例,而第一种方法不创建任何实例。
第一种方法明显更好,因为它清楚地表明它是一个静态方法。考虑这段代码:
Thread t = new Thread(someRunnable);
t.start();
t.sleep(1000);
最后一次调用看起来像什么?它肯定会让新线程 hibernate ,对吧?不...它只是调用 Thread.sleep()
,这只会让当前线程 hibernate 。
当您破坏静态方法调用以“通过”引用执行操作时,引用的值将被完全忽略——它甚至可以为空:
Util util = null;
util.method1(); // This will still work...
关于java - 以非静态方式访问方法是否会影响/有益于性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25537944/
我是一名优秀的程序员,十分优秀!