美文网首页
Java 之 数据类型、包装类

Java 之 数据类型、包装类

作者: 弥足小糊涂 | 来源:发表于2018-10-12 00:03 被阅读0次

一、有哪些数据类型?

    java的数据类型分为基本数据类型、枚举类型和引用类型

    基本数据类型:boolean、byte、short、int、long、float、double、数组、char

    枚举类型:enum

    引用类型:除了基本数据类和枚举类型其他都是引用类型

基本数据类型:

  名称                         作用                                                                    默认值                范围

  boolean                  表示真或假                                                          false                  true/false

  byte              8位、有符号,以二进制补码表示的整数,表示字节数   0                       -127~127

  short           16位、有符号,以二进制补码表示的整数                      0                   -2^15~(2^15-1)

  int                32位、有符号的以二进制补码表示的整数                   0                  -2^31~(2^31-1)

long               64位、有符号的以二进制补码表示的整数                   0L                -2^63~(2^63-1)

float              单精度、32位、符合IEEE 754标准的浮点数                0.0f          (1.4E-45)~(3.4028235E38)

double          双精度、64 位、符合IEEE 754标准的浮点数               0.0d        (4.9E-324)~(1.7976931348623157E308)

char            一个单一的 16 位 Unicode 字符                                   \u0000(即为0)~\uffff(即为65,535)

注:1、"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 103 =3140,3.14E-3 就是 3.14 x 10-3 =0.00314。

      2、一个整数的默认数据类型是int

二、字节、字符与位的关系

    bit就是位,也叫比特位,是计算机表示数据最小的单位

    1byte=8bit

    一个字符=2byte=16bit

三、基本数据类型与包装类

基本数据类型                        包装类型

    boolean                              Boolean

    byte                                    Byte

    short                                   Short

    int                                        Integer

   long                                      Long

   float                                      Float

double                                    Double

char                                        Character

包装类的详解:

        1、包装类是一个具体的类,可定义行为,解决了基本数据类型面向对象的问题

        2、可以与基本数据类型进行转换

        3、包装类是引用类型,且都是由final修饰的不可以继承

包装类的使用注意事项:

        1、在类中定义属性的时候尽量不要使用包装类,因为存在null的风险

        2、包装类在初始化时会加载组件所以相比基本数据类型会占用更多的内存

        3、注意在拆箱过程中数字包装类的取值范围问题,如果超过范围则会重新创建对象,这时如果使用 ==则会出现错误的判断

所有的整数封装类,初始值如果大于128则会创建新的对象,例如:

Integer a1 = 97, a2 = 97;

Integer a3 = 197,a4 = 197;

a1 == a2 -----> true; //97 < 128,会从缓冲区中获取对象,引用地址没有发生改变

a3 == a4 -----> false; // 197>128,会创建新的对象,引用地址发生了改变

四、如何处理精度问题

关于基本数据类型精度大小的转换:

     byte ---->(char)short --->int --->long--->float--->double  

1、可以使用高精度的来接受低精度的类型(向上转)

2、如果用低精度来接受高精度的类型需要强转(向下转,此时会出现精度丢失问题)

3、因为精度不够所以,浮点数不能用来表示精度,例如货币,当出现精度丢失的问题可以使用

BigDecimal类来表示

BigDecimal是位于java.math包下的一个类,它继承了Number实现了Comparable接口,表示不变的,任意精度的带符号的十进制数字,它继承了Number类所以可以转换成为各种数字类型的基本数据类型,并且可以进行比较

五、什么是引用类型?

除了基本数据类型和枚举类型之外,其他的都是引用类型

引用的概念

强引用:必须引用的对象,如当使用new来创建对象时,被创建的对象就是强引用,如Object object = new Object(),此时的object就是强引用,GC不会回收强引用类型,jvm会抛出OutOfMemery来终止程序,也不会对强引用进行回收

软引用:只有当内存不够的时候jvm才会回收这些对象,通常用来做缓存并且通常与饮用队列联合使用,如果软引用被GC了,那么虚拟机会自动将这个软引用加入到与之关联的引用队列中

弱引用:比软引用的引用强度更低一点,如果一个对象只具有弱引用,那么当GC扫描到这个对象的时候都会被回收,但由于GC的线程优先级低,所以不一定保证能马上被回收,可以与引用队列同时使用,当这个弱引用被GC了之后,jvm会自动将这个弱引用关联到相应的引用队列中

虚引用:相当于没用引用,任何时候都可能被回收,主要用来监控一个对象被GC的过程,必须和引用队列同时使用,GC在回收对象之前,如果发现有虚引用,那么在回收之前需要把虚引用加入到相关联的引用队列中,可以通过虚引用来了解一个对象是否将要被回收

java.lang.ref包分别表示了上面的几种不同的引用类型

Reference<T>:抽象类,定义了引用类型的通用方法

SoftReference<T>:软引用,可以和引用队列联合使用

WeakReference<T>:弱引用,可以和引用队列联合使用

PhantomReference<T>:虚引用,必须和饮用队列联合使用

ReferenceQueue<T>:引用队列,起到监控对象是否被回收成功

为什么需要这么多的引用类型?

考虑到jvm的gc如果不加以区分,jvm在进行垃圾回收的时候可以更方便识别哪些需要回收,也可以手动进行垃圾回收,即调用System.gc();来回收相应的对象

相关文章

  • Java 常用类 04. Java 包装类

    包装类 Java 数据类型分为:基本数据类型 和 引用数据类型,但基本数据类型怎么成为对象呢? 包装类:基本数据类...

  • Java中的包装类的介绍

    Java中的包装类的介绍 1,包装类的介绍 java中有8种基本的数据类型,其中每一种数据类型都对应了一种包装类。...

  • Kotlin与Java混合开发(1)✔️数据类型映射

    Java 基本数据类型 与 Kotlin 数据类型映射Java 包装类 与 Kotlin 数据类型映射Java 常...

  • [Java基础]包装类型

    [Java基础]包装类 了解一下 什么是包装类型在 Java 中, 数据类型总共可以分为2大类 : 基础数据类型和...

  • 第47节:Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 什么是基本数据类型对象包装类呢?就是把基本数据类型封...

  • JavaSE进阶五 包装类

    java中的包装类 java中对8种基本数据类型提供了8种包装类型;包装类是引用类型,父类是Object。 为什么...

  • JAVA中的对象

    java8增强的包装类 java中基本数据类型不能当作对象类型变量使用的问题, java提供了包装类 (Wrapp...

  • Java包装类--自动拆箱装箱

    1、 什么是包装类 包装类就是Java基本数据类型的对象表示形式。其中包括基本数据类型byte, char, sh...

  • Java数组内存地址解析

    包装类(wrapper class)。针对于原生数据类型的包装。所有的包装类(8个)都位于Java.lang包下。...

  • 基本数据类型的包装类

    包装类 Java提供了一组包装类,来包装所有的基本数据类型 以上包装类又分为两种子类型: 对象型包装类(Objec...

网友评论

      本文标题:Java 之 数据类型、包装类

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