局部变量和实例变量.Java的

OPK*_*OPK -1 java instance-variables local-variables

所以我正在测试一些代码,他们在这里:

public class Phone {

    String phoneNumber = "1234";

    void setNumber(){
        String phoneNumber;
        phoneNumber = "4321";
    }
}

public class TestPhone {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Phone p1 = new Phone();
        p1.setNumber();
        System.out.println(p1.phoneNumber);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

1234

为什么不4321呢?我叫setNumber所以phoneNumber应该分配给4321,我缺少什么?

Sto*_*ica 5

局部变量phoneNumber以相同的名称隐藏实例变量.

void setNumber(){
    String phoneNumber;
    phoneNumber = "4321";
}
Run Code Online (Sandbox Code Playgroud)

所以这段代码设置了局部变量,不会改变实例变量.

如果要更改实例变量,则必须使用this.前缀消除歧义,如下所示:

void setNumber(){
    String phoneNumber;
    this.phoneNumber = "4321";
}
Run Code Online (Sandbox Code Playgroud)

......或者更好的是,只需完全删除无意义的局部变量......(就像你说@RobP!)