美文网首页
JavaSE进阶五 包装类

JavaSE进阶五 包装类

作者: SimonLike | 来源:发表于2021-06-10 11:03 被阅读0次

java中的包装类

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

  • 为什么要提供8种包装类型?

    • 因为8种基本数据类型不够用,所以SUN公司又提供了对应的8种包装类型。
    基本数据量类型 包装类型 包装类的父类
    byte java.lang.Byte Number
    short java.lang.Short Number
    int java.lang.Integer Number
    long java.lang.Long Number
    float java.lang.Float Number
    double java.lang.Double Number
    boolean java.lang.Boolean Object
    char java.lang.Character Object
  • 以上8种包装类型,重点以java.lang.Integer为代表进行讲解,其他类型照葫芦画瓢就可以。

  • Integer类有两个构造方法:

    • Integer(int)
    • Integer(String)
  • 8种包装类型中其中6个都是数字对应的包装类,他们的父类都是Number,可以先看下Number类中的公共方法:

    • Number是一个抽象类,无法实例化对象。

    • Number类中有这样的方法:

      byte byteValue() 以 byte 形式返回指定的数值。
      abstract double doubleValue() 以 double 形式返回指定的数值。
      abstract float floatValue() 以 float 形式返回指定的数值。
      abstract int intValue() 以 int 形式返回指定的数值。
      abstract long longValue() 以 long 形式返回指定的数值。
      short shortValue() 以 short 形式返回指定的数值。
      
    • 这些方法其实所有的数字包装类的子类都有,这些方法是负责拆箱的。

  • 在Java5、JDK1.5之后,引入了新特性,自动装箱和自动拆箱。(方便编程)

    • 自动装箱:基本数据类型自动转换成包装类。
    • 自动拆箱:包装类自动转换成基本数据类型。
代码示例讲解方式,请多多练习。
import java.lang.String;

public class packageTest01 {
    public static void main(String[] args) {
        // 有种需求,调用doSome()方法的时候要求传一个数字进去。
        // 但是数字属于基本数据类型,doSome()方法的参数类型是Object.
        // doSome()方法无法接受基本数据类型的数字,这时候可以传一个数字对应的包装类进去。

        // 把30这个数字经过构造方法包装成对象。
        MyInt myInt = new MyInt(30);

        // doSome()方法虽然不能直接传30,但是可以传一个30对应的包装类型。
        doSome(myInt);

        // 以上是为了方便理解包装类,自己写的;实际开发中不用自己写;
        // SUN公司提供了对应的8种包装类型,直接使用就可以了。
        //-------------------------------------------------------------------------

        // 123是基本数据类型,进行构造方法包装达到了:基本数据类型向引用数据类型的转换。
        // 将 基本数据类型(转换为)--> 引用数据类型 (装箱)
        Integer i = new Integer(123);

        // 将 引用数据类型(转换为)--> 基本数据类型 (拆箱)
        int retValue = i.intValue();
        System.out.println(retValue);

        // 通过访问包装类的常量,来获取最大值和最小值
        System.out.println("int最大值:" + Integer.MAX_VALUE);// int最大值:2147483647
        System.out.println("int最小值:" + Integer.MIN_VALUE);// int最小值:-2147483648
        System.out.println("byte最大值:" + Byte.MAX_VALUE);// byte最大值:127
        System.out.println("byte最小值:" + Byte.MIN_VALUE);// byte最小值:-128


        //-------------------------------------------------------------------------
        // 在JDK1.5之后,支持自动拆箱和自动装箱了。
        // 自动装箱  基本数据类型-->引用数据类型
        Integer a = 100;
        // 自动拆箱  引用数据类型-->基本数据类型
        int b = a;
        System.out.println(a+","+b);


        //-------------------------------------------------------------------------
        // 分析以下程序
        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d);//false

        /**
         * java中为了提高程序的执行效率,将[-128-127]之间的所有包装对象提前创建好,放到一个方法区的
         * "整数型常量池"当中了,只有是用这个区间的数据不需要再new了,直接从整数型常量池中取出来。
         */

        // 原理:e变量中保存的对象内存地址和f变量中保存的对象内存地址是一样的。
        Integer e = 127;
        Integer f = 127;
        // == 永远判断的都是两个对象的内存地址是否相同。
        System.out.println(e == f);// true

        //-------------------------------------------------------------------------
        // Integer常用方法

        // static int parseInt(String s)
        // 静态方法,传参String,返回int
        int res = Integer.parseInt("1234"); // String-->int
        System.out.println(res + 100);// 1334

        double d1 = Double.parseDouble("3.14");
        System.out.println(d1 + 1);// 4.140000000000001(精度问题)

        // static String toBinaryString(int i)
        // 静态的 ,将十进制转换成二进制字符串。
        System.out.println(Integer.toBinaryString(11));// 1011

        // static String toHexString(int i)
        // 静态的 ,将十进制转换成十六进制字符串。
        System.out.println(Integer.toHexString(11));// b
        System.out.println(Integer.toHexString(17));// 11

        // static String toOctalString(int i)
        // 静态的 ,将十进制转换成八进制字符串。
        System.out.println(Integer.toOctalString(8));// 10
        System.out.println(Integer.toOctalString(10));// 12

        // static Integer valueOf(int i)
        // static Integer valueOf(String s)
        // 静态的 int/String --> Integer
        System.out.println(Integer.valueOf(11)); // 11
        System.out.println(Integer.valueOf("11"));// 11

        //-------------------------------------------------------------------------
        // String int integer之间相互转换

        // String -- >int
        String ss = "100";
        int i1 = Integer.valueOf(ss);
        System.out.println(i1 + 1); // 101

        // int -- >String
        String ss1 = i1 + "";
        System.out.println(ss1 + 1);// 1001

        // int -- >integer
        Integer itg = 1000;
        System.out.println(itg + 1);// 1001

        // integer -- >int
        int i2 = itg;
        System.out.println(i2 + 1);// 1001

        // String -- >integer
        Integer itg2 = Integer.valueOf(ss);
        System.out.println(itg2 + 1);// 101

        // integer -- >String
        String ss2 = String.valueOf(itg2);
        System.out.println(ss2 + 1);// 1001

    }

    private static void doSome(Object obj) {
        System.out.println(obj);
    }
}

class MyInt {
    int value;

    public MyInt() {
    }

    public MyInt(int value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return String.valueOf(value);
    }
}

上篇:JavaSE进阶四 String
下篇:JavaSE进阶六 通用类

相关文章

网友评论

      本文标题:JavaSE进阶五 包装类

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