3.Java 引用数据类型

作者: KaelQ | 来源:发表于2016-08-06 17:22 被阅读343次

1.引用数据类型概论

  • 引用数据类型 变量名 这样声明的时候变量为null。
  • 引用数据类型 变量名=new 引用数据类型,例如String a=new String("hi~")这时候内存存储如图:



    这时候String a 在栈内存中声明了 一个内存地址,内存地址指向堆内存中new String("hi~")声明的对象。即变量名为引用的内存地址。

2.引用数据类型分类


  • Object object= new Integer(1); //来定义一个Interger类
  • 接口
    接口不能直接new进行实例化,可以引用实现接口的类。
  • 数组
    int[] a=new int[10];

3.引用分类

  • 强引用(StrongReference)
    一般使用的引用 A a =new A();
    当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。

一句话,空间不回收。

  • 软引用(SoftReference)
    当内存空间不足时,会回收软引用对象。

一句话,空间不足就回收。

//使用软引用
Stringstr=newString("hi~");
SoftReferenceaSoft = newSoftReference(str);
str=null;
//获取软引用的实例到强引用,如果已被回收,则返回null。
String str2=(String)aSoft.get();
  • 弱引用(WeakReference)
    在java垃圾回收期扫描它管辖的范围之内时,发现弱引用,就进行回收。

一句话,发现就回收。

//使用弱引用
Stringstr=newString("hi~");
WeakReference aWeak =new WeakReference(str);
str=null;
//获取弱引用的实例到强引用,如果已被回收,则返回null。
String str2=(String)aWeak.get();
  • 虚引用(PhantomReference)
    虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。

一句话,任何时候回收。

虚引用必须要和ReferenceQueue一起使用。ReferenceQueue是一种队列,java虚拟机将垃圾回收的对象放入其中。(ReferenceQueue也可以和软引用弱引用一起使用)。

Stringstr=newString("hi~");
ReferenceQueueq=newReferenceQueue ();
PhantomReferencepr=newPhantomReference (str,q);
str=null;

4.问题

  • 问题如下
String str1=new String("hi~");
String str2=str1;
String str3=new String(str2);
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));

结果为:

true
false
true
true

相关文章

  • 3.Java 引用数据类型

    1.引用数据类型概论 引用数据类型 变量名 这样声明的时候变量为null。 引用数据类型 变量名=new 引用数据...

  • javase基础04-Scanner、Random、选择与循环结

    Scanner类 Scanner类是属于引用数据类型,我们先了解下引用数据类型。 引用数据类型的使用 引用数据类型...

  • 深入理解JS的数据类型

    js数据类型主要分为基本数据类型和引用数据类型 基本数据类型和引用数据类型的区别:基本数据类型是对值得引用,引用数...

  • JAVA之引用类型

    java中数据类型分为基本数据类型和引用数据类型。 1、引用数据类型 java中的数据类型分为基本数据类型和引用数...

  • Java-100天知识进阶-引用类型-知识铺(二)

    Java的两大数据类型: 一、内置数据类型前面一片已经介绍二、引用数据类型 引用数据类型 强引用file 软引用f...

  • 2018-12-12

    引用数据类型 引用数据类型包括:对象、数组、函数。 引用数据类型概念 对象(类型的值)是某个特定引用类型的实例。构...

  • Java之值类型和引用类型的扩展分析

    大纲: 1.什么是值类型,什么是引用类型? 2.值类型int和引用类型Integer的区别和转换 3.Java之按...

  • 6-java基础语法

    内容介绍:自定义类ArrayList集合 1 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类)...

  • 数组

    引用数据类型 引用数据类型object 对象数据类型{} 对象object[] 数组array/^$/ 正则Reg...

  • 类——Object(equals, toString, )

    equals == 基本数据类型举例: ==引用数据类型举例: equals引用数据类型举例: equals重写:...

网友评论

  • Jooyer:请问你绘图使用的是什么软件呢?
    KaelQ:@浪漫随风 微软 出品的visio
  • 0416119a816f:长知识了,那软引弱引这种在引用没有脱离作用域的时候,对象会被回收么...这么问会不会很奇怪...
  • 对酒当歌dcc:不错!

本文标题:3.Java 引用数据类型

本文链接:https://www.haomeiwen.com/subject/tavksttx.html