当形式参数和实例变量相同时,为什么赋值没有效果?

use*_*192 0 java this

我在java中尝试一个简单的例子:

class student{  
    int id;  
    String name;  

    void stud(int id,String name){  
    id = id ;
    name = name;  
    }  
    void display(){System.out.println(id+" "+name);}  

    public static void main(String args[]){  
    student s1 = new student(); 
    s1.stud(1,"sss");  
    s1.display();  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

它给了我一个o/p为0和null

以及以下程序:

class student{  
    int id;  
    String name;  

    void stud(int i,String n){  
    id = i ;
    name = n;  
    }  
    void display(){System.out.println(id+" "+name);}  

    public static void main(String args[]){  
    student s1 = new student(); 
    s1.stud(1,"sss");  
    s1.display();  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

给我输出1 sss

为什么将形式参数更改为与类的成员变量不同的名称可以正常工作?

Chr*_*ian 5

因为当你声明一个参数时

void stud(int id,String name)
Run Code Online (Sandbox Code Playgroud)

隐藏(阴影)实例变量id.因此,无论何时id在方法中访问stud,它都将引用本地 id变量,而不是实例变量.

如果要访问实例变量,请使用以下this关键字:

void stud(int id,String name) {
    this.id = id; 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

this.id将引用实例变量,同时id引用参数(local).