Java中的包装类

  • 关于包装类
    1、java中为8种基本数据类型又对应准备了8种包装类型(SUN公司已写好)。8种包装类属于引用数据类型,父类是Object。
    2、为什么要提供包装类型?分析这种需求(代码示例):
public class DemoTest{
    public static void main(String[] args) {
        /*调用doSome()方法的时候需要传一个数字进去。
        * 但是数字属于基本数据类型,
        * 而dosome()方法参数的类型是object。
        * 可见dosome()方法无法接收基本数据类型的数字,
        * 所以要传一个数字对应的包装类进去。
        * 把200这个数字经过构造方法包装成对象。*/
        Demo demo = new Demo(10);
        /*doSome()方法虽然不能直接传10,
        但是可以传一个10对应的包装类型。*/
        dosome(demo);
    }
    private static void dosome(Object obj) {
        System.out.println(obj);
        //输出:10
    }
}
public class Demo{
    int value;
    public Demo() {
    }
    public Demo(int value) {
        this.value = value;
    }
    @Override
    public String toString() {
        return String.valueOf(value);
    }
}
  • 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)

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

  • 装箱和拆箱
    1、代码示例:
public class Demo{
    public static void main(String[] args) {
        /*进行构造方法的包装达到了:
        基本数据类型向引用数据类型的转换。*/
        //这就是装箱。
        Integer i = new Integer(111);
        /*将引用数据类型转换为基本数据类型*/
        //这就是拆箱。
        float f = i.floatValue();
        /*floatValue()就是以float的形式返回指定的数值,
         * 其它形式以此类推*/
        System.out.println(f);//输出:111.0
        /*关于Integer类的构造方法,有两个:
        Integer(int)、Integer(String)。
        关于其它类的构造方法看源码*/
        Integer i2 = new Integer("222");
        System.out.println(i2);//输出:222
    }
}

2、通过访问包装类的常量,来获取最大值和最小值。
代码示例:

public class Demo{
    public static void main(String[] args) {
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
    }
}
  • jdk1.5之后支持自动装箱和自动拆箱
public class Demo{
    public static void main(String[] args) {
        //自动装箱
        Integer i = 11;
        //自动拆箱
        int x = i;
        System.out.println(x);//输出:11
        
        Integer n = 10;//n还是一个引用
        System.out.println(n + 1);
        //输出:11(n是包装类,这里的n自动拆箱了)
        
        Integer q = 127;
        Integer w = 127;
        System.out.println(q == w);//输出:true
        Integer e = 128;
        Integer r = 128;
        System.out.println(e == r);//输出:false
        /*java中为了提高程序的执行效率,
        将[-128到127]之间所有的包装对象提前创建好,
        放到了一个方法区的“整数型常量池”当中。
        目的是只要用这个区间的数据不需要再new了,
        直接从整数型常量池当中取出来。
        原理:q变量中保存的对象的内存地址和
        w变量中保存的对象的内存地址是一样的。
        "=="永远判断的是两个对象的内存地址是否相同。*/
    }
}

图例:
在这里插入图片描述

  • NumberFormatException异常
    代码示例:
public class Demo{
    public static void main(String[] args) {
        /*重点方法:static int parseInt(String s)
        静态方法,传参String,返回int.
        例子:网页上文本框中输入的100实际上是"100"字符串。
        后台数据库中要求存储100数字,此时java程序需要將"100"转换成100数字。*/
        int retValue = Integer.parseInt("123");
        /*以下代码会出现异常:NumberFormatException。
        int retValue1 = Integer.parseInt("中文");*/
        System.out.println(retValue);
    }
}
  • 进制转换
    代码示例:
public class Demo{
    public static void main(String[] args) {
        /*static String toBinarystring(int i)
        静态的:将十进制转换成二进制字符串。*/
        String s = Integer.toBinaryString(3);
        System.out.println(s);//11

        /*static String toOctalString(int i)
        静态的:将十进制转换成八进制字符串。*/
        String s1 = Integer.toOctalString(16);
        System.out.println(s1);//10

        /*static string toHexString(int i)
        静态的:将十进制转换成十六进制字符串。*/
        String s2 = Integer.toHexString(26);
        System.out.println(s2);//1a
    }
}
  • Integer.valueOf方法
    代码示例:
public class Demo{
    public static void main(String[] args) {
        Integer integer = Integer.valueOf(3);
        System.out.println(integer);
    }
}
  • 总结图例
    在这里插入图片描述
原文地址:https://www.cnblogs.com/yu011/p/12656687.html