在这种情况下使用this.name或name有什么区别? [重复]

问题描述 投票:0回答:4

这个问题在这里已有答案:

package holinheritation2;

import java.util.Scanner;

public class Inheritation2 {

    public static void main (String args[]) {

        Animal wolf = new Animal();
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        wolf.setName(name);

        if (wolf.getName().equalsIgnoreCase("Kobe")) {
            System.out.println("You are a wolf called Kobe!");
        }
    }

}

package holinheritation2;

import java.util.Scanner;

public class Animal {

    private String name;
    private int age;

    public void setName(String name) {
        this.name = name;  
    }
    public String getName() {
        return this.name;
    }

`enter code here`}

编写this.name = name的目的是什么,如果我在getName方法上返回“name”而不是“this.name”,有什么区别吗?我想我理解this.name = name然而澄清是赞赏。

java
4个回答
0
投票

写“this.name = name”的目的是什么

我认为你的意思是在setName。在setName中,this.name是你的实例变量(“field”),而namesetName接受的参数。所以this.name = name使用参数的值设置实例字段的值。

如果我在getName方法上返回“name”而不是“this.name”,有什么区别吗?

不,因为name中的范围中没有任何getName参数或局部变量,所以Java编译器知道你的意思是name实例变量。 (即使不需要,也不包括this,或者在不需要时使用name,是一种风格选择。)


0
投票

this.name引用方法中定义的局部变量名称。 name指的是类中的变量集。

这用于使编译器能够区分具有相同名称的变量集。


0
投票

这是在有阴影时完成的,你有name变量声明两次,一个在方法中作为参数或局部变量,其他作为类的成员,在方法变量成员中被参数变量this.name遮蔽,所以要访问它你必须指定name指的是成员变量name

因此,在方法中,this.name变量指的是name指成员变量private String name; public void setName(String name) { this.name = name; } 的参数。所以阴影得到了解决。

qazxswpoi

0
投票

如果局部变量与实例变量具有相同的名称,那么局部变量将隐藏实例变量,您必须使用“this”关键字才能访问隐藏的实例变量。

© www.soinside.com 2019 - 2024. All rights reserved.