如果它是最终的那么为什么要放静电?

Ale*_*lex 2 java android

有时我看到类似的东西:

public class MainActivity extends Activity
{
    public static final String url_google = "http://www.google.com";

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }    
}
Run Code Online (Sandbox Code Playgroud)

我实际上没有得到的,是为什么使用public static final,而不是 public finalfinal

A--*_*--C 14

我讲的非常广泛,但如果它是最终的,你只需要它的一个实例,所以它通过使其静态来节省内存.

更具体地说,final关键字意味着无论变量存储是什么都无法更改.这意味着一旦变量具有值,您可以使用该变量,但不能以任何方式对其进行修改.通常,要为最终变量赋值,您可以直接从声明中执行此操作,例如final int variable = 12.正如您所看到的,我在示例中使用了int,但您可以使用任何内容,包括引用变量.引用变量虽然很特殊,但因为您无法更改变量指向的内容,但您可以更改Object本身(例如使用get/set方法).

然而,归结为,一旦你制作了一个最终变量,它就占据了内存中的空间.由于我们无法进一步修改此变量,为什么每次我们的Class实例化时都要重新创建它?所以我们使用static关键字.这允许变量创建一次,并且只在内存中创建一次.

但是,有些特定情况下你不想使用static和使用final.一个示例可以是时间敏感变量,例如存储对象实例化的时间.

  • 我不会那么远.例如:`private final long timeOfObjectCreation = System.currentTimeMillis();` (3认同)
  • @ A - C您的答案是正确的,但只是部分答案.我想评论以下一行:`你可以看到我在我的例子中使用了一个int,但是你可以使用任何东西,包括引用变量.但是,你没有指定如果你使用`final`而不是引用变量,只有引用是不可变的(这意味着变量不能改变它"指向"的位置地址).该对象仍然是可变的.如果以禁止对象状态变异的方式创建对象,那么它是不可变的,但这与该类型前面的最终装饰器无关. (3认同)