最终(常量)实例(非静态)变量是否像类(静态)变量一样?

Nit*_*arg 2 java variables scope constants

在以下示例中,b声明了变量final,但没有声明static.这意味着它是一个常量实例变量.但是,因为它是常量,所以没有任何Passenger对象可以改变它的值.因此,声明它static并使其成为类变量不是更好,因此所有实例化对象只能使用一个副本吗?

class Passenger {
    int a;
    final int b = 0;

    void drive() {
        System.out.println("I'm driving!");
    }
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*icz 10

final但非static变量的目的是具有对象范围的常量.它应该在构造函数中初始化:

class Passenger {
    final int b;

    Passenger(int b) {
        this.b = b;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你总是0final变量赋一个常量的文字值(),那就没有多大意义了.使用static是首选,因此您只有一个副本b:

static final int b = 0;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我不认为有默认访问修饰符是你的意图.