!!!的位置,this 为什么不是map?

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就点不出来另一个实体类的方法