以非静态方式访问方法是否会影响/获益?

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)