Java是一门面向对象的编程语言,对象是其重要概念之一。Java中的对象是基于类创建的。在Java程序中,对象可以存放在两个地方:堆(heap)和栈(stack)。对象的引用(reference)也可以存放在堆或者栈中。
堆是内存中专门存放对象的区域。所有创建的对象都存放在堆中,并且只有程序在运行期间才能进入和离开堆。堆是由垃圾回收器自动进行管理和清理的。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } } Person person = new Person("Tom", 20);
上面的代码创建了一个Person对象,并将其存放在堆中。person变量(引用)存放在栈中,它指向该对象在堆中的地址。
栈是存放程序执行期间的局部变量和方法的区域。当程序调用一个方法时,方法会在栈中被创建(被称为方法栈帧),局部变量和方法参数都存放在这个方法栈帧中。当方法执行完成时,对应的栈帧会从栈中弹出。
public void test() { int x = 1; String str = "Hello world"; Person person = new Person("Tom", 20); }
上面的代码中包含了三个局部变量,它们都存放在栈中。person变量引用的Person对象存放在堆中。当test方法执行结束时,所有局部变量对应的栈帧会从栈中弹出。
在实际编程中,我们需要了解对象和引用的存放位置,以便正确使用它们。一些典型的问题包括:对象的生命周期如何管理,如何避免对已经销毁的对象的引用进行操作,等等。