变量 这个词有歧义。如果把变量理解为4个字节(32位机)的引用,那么1就显然错了。2呢,包含子类对象的引用的超类类型变量,如果子类重写了父类方法,默认是调子类对象的方法的。这个呢从内存模型上可以解释,因为它访问的这个东西在堆内存中是存在的。所以2不怎么对。我呢一般把对象叫做类的实例,所谓这个实例就是分配了空间并且进行了实例化(初始化)。把指这个类的实例的那个东东叫作引用。也就是这里的变量。有点类似到C++中的指针和指针所指向的空间。所谓对象就是指这个空间,指针呢就是存储指向这个空间的一个内存起始地址。因为在Java中 Object obj = new Object(); 真正的对象实例是new Object();而obj仅仅是存储指向这个new Object()空间的-引用(说明下:在JVM中可能是一个指向这个空间的索引)不等同于决对地址。JVM会根据内存实时信息根据一定算法回收内存,调整堆大小。所以这个引用存的就是一个偏址。 |