Java 包装类(Wrapper)

Java 包装类(Wrapper)

1 包装类Wrapper概述

  • 作用: 用于将原始类型(int,char,float等)转换为相应的对象。

  • 8个基本类型中的每一个都有对应的包装器类。

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

2 Integer 类

Constructor Description
Integer(int value) 构造一个新分配的 Integer对象,该对象表示指定的 int值。
Integer(String s) 构造一个新分配 Integer对象,表示 int由指示值 String参数。
static Integer valueOf(int i) 返回一个 Integer指定的 int值的 Integer实例。 返回表示指定的 int 值的 Integer 实例
static Integer valueOf(String s) 返回一个 Integer对象,保存指定的值为 String
package com.fcarey.wrapper;

public class IntegerDemo {
    public static void main(String[] args) {
        Integer i1 = new Integer(1);
        System.out.println(i1);
        Integer i2 = new Integer("2");
        System.out.println(i2);

        Integer i3 = Integer.valueOf(3);
        System.out.println(i3);
        Integer i4 = Integer.valueOf("4");
        System.out.println(i4);
    }
}

3 自动装箱和拆箱

自动装箱和拆箱就是 Java 编译器自动处理基本数据类型与包装类之间的转换,使程序员无需手动编写繁琐的代码。

  • 自动装箱(Autoboxing): 是指将基本数据类型自动转换为相应的包装类对象。即:将一个 int 类型的值直接赋值给 Integer 类型的变量,而无需显式创建 Integer 对象。

  • 自动拆箱(Unboxing): 自动拆箱是指将包装类对象自动转换为相应的基本数据类型。这意味着,你可以直接将一个 Integer 对象赋值给 int 类型的变量,而无需显式调用 .intValue() 方法。

  • package com.fcarey.wrapper;
    
    public class IntegerDemo2 {
        public static void main(String[] args) {
            Integer i1 = 1; // 自动装箱
            Integer i2 = i1 + 2; // i1 + 2 自动拆箱;i2 = i1 + 2; 是自动装箱
            System.out.println(i2);
        }
    }
    
    
    • 1 是一个基本数据类型的整型常量;
    • i1 是一个 Integer 类型的变量。通过自动装箱,i1 的值被自动封装为 Integer 对象。
    • i1 是一个 Integer 类型的对象,通过自动拆箱,它的值被自动提取为一个基本数据类型的 int,并与 2值进行相加得到一个基本数据类型的整形常量。
    • i2 是一个 Integer 类型的变量。通过自动装箱,i1 + 2 的值被自动封装为 Integer 对象。
  • 自动装箱和拆箱的好处

    1. 提高可读性: 自动装箱和拆箱使得代码更加清晰和简洁,不需要频繁地进行类型转换。
    2. 减少错误: 自动装箱和拆箱减少了因类型转换错误而引发的 bug,因为编译器可以在编译时进行类型检查。
    3. 更容易使用集合类: 自动装箱和拆箱使得将基本数据类型放入集合类(如 ArrayList<Integer>)变得更加容易,而无需手动转换。
    4. 提高性能: Java 的新版本中对自动装箱和拆箱进行了性能优化,使得它们的性能更好。
  • 自动装箱和拆箱的注意事项

    1. 性能考虑: 尽管 Java 的性能优化有所改进,但在高性能要求的场景中,频繁的自动装箱和拆箱操作可能会导致性能下降。在这种情况下,建议手动管理类型转换。
    2. 空指针异常: 自动拆箱可能会引发 NullPointerException,因为包装类对象可能为 null。在拆箱之前,最好进行空值检查。

4 int 和 String 类型的相互转换

4.1 int 转换为 String

转换方式

  • 方式一:直接在数字后加一个空字符串
  • 方式二:通过String类静态方法 valueOf()
package com.fcarey.wrapper;

public class IntegerDemo3 {
    public static void main(String[] args) {
        int i = 1;
        System.out.println(i + " " + 2);
        System.out.println(String.valueOf(i) + 2);
    }
}

4.2 String 转换为 int

转换方式

  • 方式一:先将字符串数字转成Integer,再调用valueOf()方法
  • 方式二:通过Integer静态方法parseInt()进行转换
package com.fcarey.wrapper;

public class IntegerDemo4 {
    public static void main(String[] args) {
        String s = "1";
        //方式1:String --- Integer --- int
        Integer i1 = Integer.valueOf(s);
        int i2 = i1.intValue();
        System.out.println(i2 + 2);

        // 方式2: 通过Integer静态方法parseInt()进行转换
        int i3 = Integer.parseInt(s);
        System.out.println(i3 + 2);
    }
}
posted @ 2024-09-09 18:00  f_carey  阅读(54)  评论(0编辑  收藏  举报