this关键字的作用--(成员变量和局部变量同名时该怎么办)

本文详细解析了Java中this关键字的使用场景,特别是在成员变量与局部变量同名时如何区分两者,以及this关键字如何帮助正确引用成员变量。通过具体实例展示了this的指向规则,加深了对Java对象和方法调用的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当两个变量不同名时,就非常好办啦,如下面打招呼的例子
成员变量name。局部变量who

package cn.itcast.day0601.demo03;

public class Demo01Person {
    String name;//我自己的名字
    public void sayHello(String who){
        System.out.println(who+"你好,我是"+name);
    }
}

创建对象调用它:

package cn.itcast.day0601.demo03;

public class Demo01UsePerson {
    public static void main(String[] args) {
        Demo01Person person = new Demo01Person();
        person.name = "小明";
        person.sayHello("小丽");
    }
}

调用结果:
在这里插入图片描述
当他们同名时,如果你没有用this,则会采用就近原则。会优先使用局部变量。
我来把上面例子改同名:

package cn.itcast.day0601.demo03;

public class Demo01Person {
    String name;//我自己的名字
    public void sayHello(String name){
        System.out.println(name+"你好,我是"+name);
    }
}

此时调用:

package cn.itcast.day0601.demo03;

public class Demo01UsePerson {
    public static void main(String[] args) {
        Demo01Person person = new Demo01Person();
        person.name = "小明";
        person.sayHello("小丽");
    }
}

在这里插入图片描述
是不是很尴尬。因此当我们不小心同名时,为了避免尴尬。我们既要用访问本类中的成员变量,又要访问方法中的局部变量。那我们访问成员变量时,就要使用格式:this.成员变量名。

package cn.itcast.day0601.demo03;

public class Demo01Person {
    String name;//我自己的名字
    public void sayHello(String name){
        System.out.println(name+"你好,我是"+this.name);
    }
}

调用:

package cn.itcast.day0601.demo03;

public class Demo01UsePerson {
    public static void main(String[] args) {
        Demo01Person person = new Demo01Person();
        person.name = "小明";
        person.sayHello("小丽");
    }
}

结果如下:
在这里插入图片描述

好啦,知道怎么用后,我们来说说这个this到底指的是啥呢?

简单来记:通过谁调用的方法,谁就是this。如上面例子:
person.sayHello();person对象调用的,因此this指的就是person。
下面来验证,就是看他们地址是否一样:

package cn.itcast.day0601.demo03;

public class Demo01Person {
    String name;//我自己的名字
    public void sayHello(String name){
        System.out.println(name+"你好,我是"+this.name);
        System.out.println(this);
    }
}
package cn.itcast.day0601.demo03;

public class Demo01UsePerson {
    public static void main(String[] args) {
        Demo01Person person = new Demo01Person();
        person.name = "小明";
        person.sayHello("小丽");
        System.out.println(person);
    }
}

看下图,地址一样ba~
在这里插入图片描述

学习使我快乐~
午饭午饭我来了
谢谢你们的支持

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值