栈:
只能存储知道确切大小和生命周期的数据,因为编译器需要生成相应的代码以准确的移动栈指针。
也因此,java对象不会放在栈上。
分配内存和释放内存是通过上下移动栈指针完成的,这种方法的效率仅仅次于寄存器。
没有办法可以在栈上面创建非主类型的对象,这是和c++不同的。
堆:
在堆上为数据分配空间很灵活,因为不需要数据的确切大小以及生命期,但是效率较栈分配要低,方法和c++是一样的,用new。
不属于主类型的对象,都是通过new命令创建在堆上的。
如果想把主类型的对象放到堆上,可以通过new <主类型的封装器>来实现。
boolean -> Boolean
char -> Character
byte -> Byte
short -> Short
int -> Interger
long -> Long
float -> Float
double -> Double
void -> Void