一、用引用操作对象
String s;
这里创建的只是引用,并不是对象。
String s = "abc";
这里用“=”把s和一个String关联在一起,后面可以用s去操作这个对象。
二、储存位置
寄存器
最快的存储区,它在处理器内部,它是根据需求自己进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
堆栈
位于RAM中,先进后出。引用就是存放在这里,存放着堆中对应的对象的位置信息。它由编译器自动分配释放,所以Java系统必须知道存储在堆栈内所有项的确定生命周期(引用的作用域)。
堆
一种通用内存池(位于RAM中),用于存放所有的Java对象。当需要一个对象时,只需new写一行代码,会自动在堆里进行存储分配。(程序员可以控制分配,但释放由垃圾回收机制执行。)
全局变量、静态变量区
程序结束,由系统释放。
常量存储
常量通常直接存放在程序代码内部,程序结束由系统释放。
非RAM存储
数据完全存活于程序之外,在程序没有运行时也存在。基本例子包括流对象和持久化对象。流对象中,对象转化成字节流,通常被发现给另一台机器;持久化对象中,对象被存放于磁盘上,可以由JDBC和Hibernate这样的机制对数据库中的数据进行操作。
运行时的存储分配:
三、基本类型和包装类
八种基本类型
boolean——1字节,默认:false
char——2字节,默认:null
byte——1字节,默认0
short——2字节,默认0
int——4字节,默认0
long——8字节,默认0
float——4字节,默认0.0
double——8字节,默认0.0基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。例如,对基本数据类型使用a==b,那么b的内容就复制给了a。若接着又修改了a,而b不会受这种修改的影响。对包装类则不然。
高精度数字
BigInterger——支持任意精度的整数;
BigDecimal——支持任意精度的定点数;
四、程序
java.lang是默认导入到每个Java文件中的,所以它的所有类都可以被直接使用,不用import导包;
main()方法的参数是一个String对象的数组。有些程序中并未用到args,但是Java就编译器要求必须这么做,因为args要用来存储命令行参数。