Java的内存分配上,主要分4个块: 一块是用来装代码的,就是编译的东西。 一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量。 一块是stack,也就是栈,是用来装变量和引用类型的,但区别在于,装了变量以后,变量上是有值的,而引用类型本身在stack上是没有值的(地址)。 一块是heap,也就是堆!堆可以一句话概括,装new出来的东西! 所以综上所述,基本数据类型都在stack中,而引用类型,变量是放在stack中,真正有内容的东西放在heap中,也就是当new了一个新的引用类型,他就会放在堆中,同时栈中的引用类型变量会指向堆中你new出来的东西!