java基础系列(十一) this关键字
一 . 概念
this关键字的本质到底是什么呢?
其实,JVM在堆空间给对象分配空间时,每个对象都有一个隐藏的属性this,this指向该对象本身。即,如果用C语言来解释的话,this就是一个指向堆空间中对象本身的指针,只不过在Java中没有指针,叫做引用而已。this自己是对象的一部分,它也在堆空间,但是它又指向了它自己。
来张内存图直观的表示一下,如下图
图解 :
二. 经典例子
一看图就明白了,就是这么回事儿。当然,我们还可以通过另一种直观的方法来理解this,我们可以分别输出创建的Phone类对象和this对象的哈希码值,并进行比较。进行该操作需要用到hasCode方法(之后我们会讲到hasCode)。
package com.this_test;public class Phone {//成员变量:private String brand; //手机品牌private String model; //手机型号private String name; //手机持有人//setter,getter方法public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public String getModel() {return model;}public void setModel(String model) {this.model = model;}public String getName() {return name;}public void setName(String name) {this.name = name;}//定义一个方法,用来输出当前this对象的哈希码值。public void printThisHasCode() {System.out.println(this.hashCode());}}
package com.this_test;public class TestPhone {public static void main(String[] args) {//1.创建对象Phone phone1 = new Phone();Phone phone2 = new Phone();//2.调用成员变量,并打印//给成员变量赋值phone1.setBrand("Huawei");phone1.setModel("Mate40");phone1.setName("world");System.out.println("输出phone1对象的哈希码值 : " + phone1.hashCode());System.out.print("输出this对象的哈希码值 : ");phone1.printThisHasCode();System.out.println("------------------------------------");phone2.setBrand("Huawei");phone2.setModel("p40");phone2.setName("Five");System.out.println("输出phone2对象的哈希码值 : " + phone2.hashCode());System.out.print("输出this对象的哈希码值 : ");phone2.printThisHasCode();}
}
输出打印:
输出phone1对象的哈希码值 : 366712642
输出this对象的哈希码值 : 366712642
------------------------------------
输出phone2对象的哈希码值 : 1829164700
输出this对象的哈希码值 : 1829164700
三. 参考
java 面向对象三大特性之封装 万字详解(超详细)_java基础——面向对象三大特征之封装-CSDN博客