不可变的最终变量应该是静态的吗?

the*_*yuv 4 java

在java中,如果变量是不可变的,那么最终它应该是一个静态类变量吗?

我问,因为每次类的一个实例使用它时创建一个新对象似乎很浪费(因为它始终是相同的).

例:

每次调用时在方法中创建的变量:

public class SomeClass {

    public void someMethod() {

        final String someRegex = "\\d+";
        final Pattern somePattern = Pattern.compile(someRegex);

        ...

    }

}
Run Code Online (Sandbox Code Playgroud)

变量创建一次:

public class SomeClass {

    private final static String someRegex = "\\d+";
    private final static Pattern somePattern = Pattern.compile(someRegex);

    public void someMethod() {

        ...

    }

}
Run Code Online (Sandbox Code Playgroud)

使用后一个代码总是更好吗?

这个答案似乎表明最好使用后面的代码:如何在Java中初始化长度为0的String数组?

Bla*_*ake 6

绝对不是.

class MyIntegerContainer{
    private final int x;
    public MyIntegerContainer(int x){
        this.x = x;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你创建了不可变的最终x静态,那么所有的实例MyIntegerContainer将共享相同的值,x这对于一个非常好的数据容器是不会的.