Java方法传参
Java里方法的参数传递方式只有一种:值传递。值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。
所以基本数据类型是值复制,对象类型是引用值复制,也就是对象地址,数组也是引用类型
四种引用类型
//创建一个引用
String str;
-
强引用(Strong Reference)
//只要obj还指向Object对象,Object对象就不会被回收 Object obj = new Object(); //手动设置null obj = null;
- 只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。
- 如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了
-
软引用(Soft Reference)
-
在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象
-
如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常
-
这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等
-
java.lang.ref.SoftReference类来表示软引用
System.gc(); //主动通知垃圾回收
-
-
弱引用(Weak Reference)
- 无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收
- JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用
-
虚引用(Phantom Reference)
- 如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收
- JDK1.2 之后,用 PhantomReference 类来表示
- 将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用