won*_*t77 3 java performance static
假设这里的所有方法调用都是静态的,如下所示:
public class Util {
public static void method1() {
}
}
Run Code Online (Sandbox Code Playgroud)
以静态方式访问:
Util.method1();
Util.method2();
Util.method3();
Run Code Online (Sandbox Code Playgroud)
以非静态方式访问
Util util = new Util();
util.method1();
util.method2();
util.method3();
Run Code Online (Sandbox Code Playgroud)
两种方式都有任何性能差异吗?我知道这样做的第一种方法是正确访问它.但第二种方法只实例化一次util对象而不是三次.除了正确访问这些方法之外,我找不到任何指向任何东西的东西.据我所知,没有功能差异,但存在逻辑差异.如果有人知道的话,寻找任何一种方式的成本与收益.
Jon*_*eet 12
两种方式都有任何性能差异吗?
是的 - 由于构建了一个毫无意义的实例,第二个稍慢.
我知道这样做的第一种方法是正确访问它.但第二种方法只实例化一次util对象而不是三次.
不,第二种方式创建一个实例,Util而第一种方式不创建任何实例.
第一种方法明显更好,因为它清楚地表明它是一种静态方法.考虑以下代码:
Thread t = new Thread(someRunnable);
t.start();
t.sleep(1000);
Run Code Online (Sandbox Code Playgroud)
最后一次通话看起来像什么?肯定会让新线程睡觉,对吧?不......它只是调用Thread.sleep(),它只会使当前线程休眠.
当您修改静态方法调用以"通过"引用时,引用的值将被完全忽略 - 它甚至可以为null:
Util util = null;
util.method1(); // This will still work...
Run Code Online (Sandbox Code Playgroud)