Skip to content

包装类

Java 中提供了两个类型系统,基本数据类型 和 引用数据类型。可以把基本数据类型转换为引用数据类型的类就叫做包装类。

Java 针对 8 种基本数据类型都定义了对应的 包装类(封装类):

基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter
java
public static void main(string[] args) {
  int num = 520;
  
  // Integer obj = new Integer(520);  // 已弃用
  Integer obj = Integer.valueOf(520);
}

image-20240722230701324

自定义包装类

理解包装类内部是什么实现的。

java
class MyInteger {
  int value;

  public MyInteger() {
  }

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

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

包装类和基本数据类型转换

基本类型 转 包装类(装箱)

基本数据类型只能表示单一的值,把他变为包装类之后,就可以拥有和 类 一样的多的方法使用了

  • 方式一:使用包装类的构造函数(已过时)

    java
    public class warpperTest {
      @Test
      public void junitTest() {
        int num = 10;
        Integer i1 = new Integer(num); //基本数据类型转为包装类
        System.out.println(i1.toString());
    
        float num1 = 12.5F;
        Float f1 = new Float(num1);
        System.out.println(f1.toString());
    
        boolean bool = false;
        Boolean b1 = new Boolean(bool);
        System.out.println(b1); //false
    
        Boolean b2 = new Boolean("TRue");
        System.out.println(b2); //true
      }
    }

    TIP

    Boolean 包装类比较特殊,它是忽略大小写和 "true" 进行比较,如果是和 "true" 相同,就返回 true,其他情况都返回 false。

  • 方式二:使用包装类的 valueOf() 方法

    java
    public class warpperTest {
      @Test
      public void junitTest() {
        Integer num = Integer.valueOf(100);
        System.out.println(num.toString());
    
        boolean bool = Boolean.valueOf("FALSE");
        System.out.println(bool);
      }
    }

    TIP

    无论是 构造函数的方式,还是 valueOf() 的方式,都是可以传递一个字符串作为参数的,只不过该字符串必须和基本数据类型对应,例如 "12.3F" 对应 12.3F,"true" 对应 true。

包装类 转 基本类型(装箱)

基本数据类型 转 包装类需要使用 xxxValue() 方法,例如:Integer -> intValue()。

java
@Test
public void test1() {
  Integer i = Integer.valueOf(10);
  int i1 = i.intValue();
  System.out.println(i1); //10

  Boolean b = Boolean.valueOf(true);
  boolean b1 = b.booleanValue();
  System.out.println(b1); //true
}

自动装箱与拆箱

由于上述的转换在开发中使用的太过频繁,因此从 JDK 5.0 开始,基本数据类型和包装类的装箱、拆箱可以自动完成。

  • 自动装箱:

    java
    @Test
    public void test3() {
      Integer i = 100;
      System.out.println(i); //100
    }
  • 自动拆箱:

    java
    @Test
    public void test3() {
      Integer i = 100;
      int i1 = i;
      System.out.println(i1); //100
    }

字符串与包装类转换

字符串 转 基本类型/包装类

字符串 转 基本数据类型/包装类 时,使用 包装类.parsexxx() 方法。

java
public class warpperTest {
  @Test
  public void junitTest() {
    String s1 = "123";
    int i = Integer.parseInt(s1);
    System.out.println(i);

    String s2 = "true";
    boolean b = Boolean.parseBoolean(s2);
    System.out.println(b);
  }
}

基本类型/包装类 转 字符串

基本数据类型/包装类 转 字符串时,有 3 中方式:

  • 使用 toString() 方法
  • 使用 String.valueOf() 方法
  • 使用 变量 + "" 方法
java
public class warpperTest {
  @Test
  public void junitTest() {
    Integer i1 = Integer.valueOf(100);
    //使用 String.valueOf()
    String s3 = String.valueOf(i1);
    //使用 toString()
    String s4 = i1.toString();
    //使用 变量 + ""
    String s5 = i1 + "";
  }
}

Released under the MIT License.