this关键字

作者: 许宏川 | 来源:发表于2015-06-12 13:08 被阅读600次

    来看下面这段代码:

    public String name;
    
    public void showName(String name) {
    System.out.println(name);
    }
    

    上面的代码中有个叫name的成员变量,也有个同样叫name的方法参数。那么showName方法会输出参数的name还是成员变量name呢?

    测试代码:

    ThisDemo td = new ThisDemo();
    td.name = "张三";
    td.showName("李四");
    

    运行结果:

    <pre>
    李四
    </pre>

    运行结果显示答案是会输出参数的name,原因是Java语法获取变量的时候采取的是就近原则所以name代表的是离它最近的参数name。如果想要输出成员变量name怎么办,把参数名name改了吗?那又得多想一个变量名多麻烦啊。还好Java提供了this关键字可以引用类的对象。

    把上面的代码改成:

    public String name;
    
    public void showName(String name) {
    System.out.println("我是方法参数:" + name);
    System.out.println("我是类的属性:" + this.name);
    }
    

    运行结果:

    <pre>
    我是方法参数:李四
    我是类的属性:张三
    </pre>

    可以看出this关键字代表调用改方法的对象,此时相当于对象td。

    再来看一个例子。

    public ThisDemo returnThis() {
    return this;
    }
    
    public ThisDemo getInstance() {
    return new ThisDemo();
    }
    

    测试代码:

    ThisDemo td2 = td.returnThis();
    ThisDemo td3 = td.getInstance();
    System.out.println("td和td2是同一对象吗? --> " + (td == td2));
    System.out.println("td和td3是同一对象吗? --> " + (td == td3));
    

    运行结果:
    <pre>
    td和td2是同一对象吗? --> true
    td和td3是同一对象吗? --> false
    </pre>

    这个例子很明确的说明了“this关键字代表调用改方法的对象”,该例子中return this返回的是调用该方法的对象也就是td,所以td2和td指向的是同一对象。而 new ThisDemo是创建一个新的ThisDemo对象。所以td3和td并不指向同一对象。

    本文所用代码下载:百度网盘

    相关文章

      网友评论

        本文标题:this关键字

        本文链接:https://www.haomeiwen.com/subject/psvjqttx.html