Java是基于C++的,但Java是一种更加 纯粹 的面向对象程序设计语言。
C++和Java都是混合/杂合型语言。杂合型语言允许多种编程风格。
每种编程语言都有自己操纵内存中元素的方式。
在Java中,一切都被视为对象。操纵的标识符实际上是对象的一个 引用 。
//创建的只是引用而不是对象 String s1; //创建一个引用的同时便进行初始化 //Java语言的特性:字符串可以用带引号的文本初始化 String s2 = "abcd"; //更通用的初始化方法 //创建一个引用,并与一个新的对象相关联 String s3 = new String("abcd");
程序运行时,对象的放置安排,内存的分配都是我们必须了解的。
有五个不同的地方可以存储数据:
1. 寄存器
2. 堆栈
3. 堆
4. 常量存储
5. 非RAM存储
寄存器:位于数量极其有限的寄存器,是最快的存储区,寄存器会根据需求进行分配,不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象
堆栈:位于通用RAM(随机访问存储器)中,通过 堆栈指针 可以从处理器那里获得直接支持,堆栈指针向下移动,则分配新的内存,向上移动,则释放那些内存(这是一种快速有效的分配存储方法,仅次于寄存器)创建程序时,Java系统必须知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。--->限制了程序的灵活性,所以某些Java数据(如对象引用)存储在堆栈中,但是Java对象并不存储在堆栈中
堆:通用的内存池(位于RAM区)。用于存储所有java对象。编译器不需要知道存储的数据在堆中存活多长时间(灵活性,但分配和清理的时间较长)。
常量存储:存放在程序代码内部。
非RAM存储:数据完全存活于程序之外,不受程序的任何控制,在程序没有运行时也可以存在。如 流对象 , 持久化对象 。
new一个对象存储在堆里,因此用new创建一个对象——特别是 小的,简单的变量 往往不是很有效的。
对于这些类型,Java采取不用new来创建变量,而是创建一个并非是引用的自动变量(直接存储值,并且存储在堆栈中)。
Java语言对于每种基本类型所占存储空间大小是固定的,不像其他语言随机器硬件架构的变化而变化。(可移植性更高)
/** * 基本类型创建的不是引用,而是一个自动变量,直接存储值,并且存储在堆栈中。 * 基本类型都有相对应的包装器类,能在堆中创建一个非基本对象,用来表示相对应的基本类型。 */ //基本类型 int i = 5; //包装类型 Integer integer = new Integer(i); //Java SE5自动包装 Integer integer1 = 4; //反向转换 int i1 = integer1;