最终的静态可以改变吗?

Cur*_*ico 2 java

我写了我的代码,但现在我想改变看看发生了什么.

在对象类字段中,

static final String msg="here";
Run Code Online (Sandbox Code Playgroud)

并在同一个对象中,在一个methot

public void givemessage(int no)
{
    System.out.println("look.");       
    System.out.println(msg);
}
Run Code Online (Sandbox Code Playgroud)

在这里,当我从main打电话时,它给出了"here".但

public void names(String[] names)
{
    String msg=" - ";
    System.out.println(msg);
}
Run Code Online (Sandbox Code Playgroud)

在这里,当我从主打电话给它 - ,而不是"这里"BUt它是最终的静态.它为什么会改变,为什么没有编译错误?或者我误解了所有的java?

mor*_*ano 8

您正在使用两个不同的变量,类变量是不可变的(最终)但本地变量不是,它们具有相同的名称但它们不相同.

如果你想验证这一点,请在主方法中输入类似MyClassName.msg =" - "的内容,你会看到编译器会抱怨.

  • 永恒!=最终.它们是两个不同的概念.实际上,String类是一个不可变类.请阅读此处以获取进一步说明http://stackoverflow.com/a/8798424/2542027 (2认同)