Java分为8种基本类型和对象类型。将变量赋值为基本类型,值就存储在变量里。将变量赋值为对象类型,那这个变量只是指向对象的引用。
注意String是对象类型。
当声明基本类型变量时,是赋值:
int a = 1;
当声明对象类型变量时,是引用:
StringBuffer x -- 是在创建引用x,所以看一个变量是不是引用,只要看左边的类型是基本类型还是对象类型。
Java中的函数传参也是用这样的思维:参数类型是基本类型时,是传值;参数类型是对象类型时,传进来的是引用(相当于指针)。
Java中用new创建的对象,不需要显式释放,在java中没有delete,所有对象都是在堆上创建的,JVM有一个依赖于引用计数的垃圾收集器,一旦对象不再被引用,就被垃圾收集器回收,因此可以将引用对象的变量赋null:
Foo myObject = new Foo(); // 1 reference
Foo myOtherObject = myObject; // 2 references
myObject = null; // 1 reference
myOtherObject = null;
不被任何引用指向的对象,即“垃圾对象”,会被垃圾回收器回收,这种情况常见于在栈中声明的对象变量,退出作用域时被释放。
System.gc();程序中调用System.gc()可以显式让虚拟机执行垃圾回收。