Java常用类:包装类/整数缓冲区

包装类

  • 基本数据类型所对应的引用数据类型
  • Object可以统一所有数据,包装类的默认值时null

包装类对应:

基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

类型转换与装箱、拆箱

  • 装箱:基本数据类型转换为包装类 栈->堆

    拆箱:包装类转换为基本数据类型 堆->栈

  • 8种包装类提供不用类型间的转换方式

    Number父类中提供的6个共性方法

    valueOf( )静态方法 -->装箱

    parseXXX( )静态方法 -->字符串转基本类型

  • 注意:类型转换时要保证类型兼容,否则抛出NumberFormatException异常


装箱/拆箱:

public class Demo1 {
 public static void main(String[] args) {
     //jdk1.5之前
     //类型转换:装箱,基本类型转成引用类型的过程
     int num1=18;
     //使用Integer类创建对象
     Integer integer1=new Integer(num1);
     Integer integer2=Integer.valueOf(num1);


     //类型转换:拆箱,引用类型转成基本类型
     Integer integer3=new Integer(100);
     int num2=integer3.intValue();
//===================================================
     //jdk1.5之后,自动装箱和拆箱
     int age=30;
     //自动装箱
     Integer integer4=age;
     //自动拆箱
     int age2=integer4;
 }
}

基本类型和字符串之间转换:

package com.wu.包装类;

public class Demo1 {
    public static void main(String[] args) {
         //基本类型和字符串之间转换
        //1 基本类型转成字符串
        int n1=100;
        //1.1 使用+号
        String s1=n1+"";
        //1.2使用Integer中的toString()方法
        String s2=Integer.toString(n1);
        //重载方法:public static String toString(int i,int radix)
        // i - 要转换成字符串的整数。
        //radix - 用于字符串表示形式的基数。

        //2 字符串转成基本类型
        String str="111";
        //使用Integer.parseXXX()
        int n2=Integer.parseInt(str);

        //boolean字符串形式转成基本类型,"true"-->true, 非"true"-->false
        String str2="f";
        boolean b1=Boolean.parseBoolean(str2);//b1=false
    }
}



整数缓冲区

  • 在Java 5中,在Integer的操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同的对象引用实现了缓存和重用。

  • Java预先创建了256个常用的证书包装类型对象

  • 在实际应用当中,对已创建的对象进行复用

  • 适用于整数值区间-128 至 +127。

    只适用于自动装箱。使用构造函数创建对象不适用。

    在创建对象之前先从IntegerCache.cache中寻找。如果没找到才使用new新建对象。

package com.wu.整数缓冲区;

public class Demo1 {
    public static void main(String[] args) {
        // 面试题
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1 == integer2); // false

        Integer integer3 = 100;// 自动装箱:Integer.valueOf(100)
        Integer integer4 = 100;
        System.out.println(integer3 == integer4); // true

        Integer integer5 = 200;// 自动装箱
        Integer integer6 = 200;
        System.out.println(integer5 == integer6); // false

        // 因为缓存区数组 [-128, 127] 在这之内地址一样
        //在创建对象之前先从IntegerCache.cache数组中寻找。如果没找到才使用new新建对象。

    }
}
posted @ 2020-12-26 11:32  迪迦是真的  阅读(202)  评论(0)    收藏  举报
//复制代码按钮 //代码行号 //评论