package com.javabase;
public class Student {
public static void main(String[] args) {
Animal x1 = new Animal();
Animal x2 = new Animal();
//x1、x2未对应的引用,存放在栈(stack)空间中。
//new Animal() new出来的类的实例(含成员变量方法等)存放在堆(heap)中,
//每new一个对象,他的实例都会在堆空间中拥有各自的一套副本,且互不干扰。。
class Animal {
public int legs;
public void eat() {
System.out.println("Eating");
}
public void move() {
System.out.println("Moving");
}
}
}
}
Animal x1 = new Animal();这段代码都做了什么?
- 在栈空间开辟了一块区域,用来存放对象的引用x1。
- 在堆空间创建了对象的实体,在堆空间创建的实体对象都会有一个首地址的值(16进制),并赋予x1。
- x1引用通过赋予的X01234值去指向堆空间中的对象实体,相当于Java中的指针。
Sysout.println.out(x1);输出的 com.javabase.Animal@15db9742就是堆空间中对象实体的首地址。