public class ThisTest { public static void main(String[] args) { ThisTest thisTest = new ThisTest(); thisTest.test1(); } public void test1(){ // this=thisTest System.out.println(this); HashMap<Object, Object> map = new HashMap<>(); //!!! this = thisTest map.put(this,"hello"); ThisTest thisTest2 = new ThisTest(); thisTest2.print(); } public void print(){ // this=thisTest2 System.out.println(this); } }
this是类指针啊,代表当前类ThisTest,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值
你是问
map.put(this,"hello");
为社么不是
map.put(map,"hello");
吗?为什么会这么问呢?
其实
map.put(this,"hello"); 也不太对。我才应该是
map.put("hello", this);
这样可以用名字查对象。
this是保留字段,他的作用是指向类对象本身,而不是指向这一个段代码的上一个对象。同时我们可以通过this调用类对象的本身属性。
//若有一个类A,其有一个构造方法
class A{
print int a=-1;
public A(int a){
//this指向这个类本身,因此this.a实际上是指向的A的成员属性a;
System.out.println("a="+a);
System.out.println("a="+this.a);
this.a=a+1;
System.out.println("a="+this.a);
}
}
假设调用构造方法A a=new A(100);则依次输出的值为100 -1 101
this不是代表调用该方法的对象,this代表本身的实体类,
只是你在本实体类里面调用非静态方法就可以this点出来,在其他实体类里面this就点不出来另一个实体类的方法