第二章的标题就是一切皆对象,在java中用引用操作对象,在java代码中:
1 String s;//这里创建了一个String的引用s,但是没有指向任何的String对象2 s = new String("jiren");//将引用指向通过new创建的String对象3 s.toUpperCase();//通过引用s向它指向的对象发出信息,即通过引用来操作引用指向的对象,将刚刚创建的String对象中的字符变大写。4 String str = new String("hello");//在创建的同时初始化对象。
对象在java中是存在什么地方的?内存是怎么分配的呢?
- 寄存器。这是最快的存储区,它位于处理器的内部,而且数量及其有限,所以我们不能直接控制,是按需分配的。
- 堆栈。堆栈位于通用的RAM中,通过堆栈指针来分配或者释放内存,通过堆栈指针的移动来快速有效的分配内存,速度仅次于寄存器,这个地方重要存储java中对象的引用和元数据,在这里,java系统必须知道堆栈内所有项的确切的生命周期,以便来通过移动堆栈指针来释放和分配内存。
- 堆。一种通用的内存池,同样位于RAM中,用于存放所有的java对象。在堆中,java编译器不需要知道存储的数据在堆里的存活时间,这样分配起来比较容易,所以当我们使用new在创建一个新的对象的时候,代码执行,会自动的在堆里进行存储分配。最后他告诉我们的是,灵活是要有代价的,代价就是我们在堆里分配和清理需要比堆栈里面的分配和清理花费更多的时间。
- 常量存储。这里存储程序中永远不会改变的常量。
- 非RAM存储。
java中的基本类型,主要包含八类,包括boolean,char,byte,short,int,long,float,double,基本类型不用通过new来创建,而且它存储在速度更快的堆栈中,存取起来更加的高效。同时java提供了两个用于高精度计算的类:BigInteget和BigDecimal,前者支持任意精度的整数,后者支持任意精度的浮点数。