java中的包装类

java一共有8中基本数据类型,每一种数据类型就有对应的包装类。

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
  • 包装类有什么用?

可以在对象中定义更多的功能方法操作该数据。

  • 包装类的常用方法

来看一下其中一个包装类Integer。

Integer 类在对象中包装了一个基本数据类型int的值。

该类还提供了多个方法,能在int类型和String类型之间互相转换,

还提供了处理int类型时非常有用的其他一些常量与方法。

常量:

Integer包装类里面有int范围最大值与最小值

由于是静态,可以直接调用

Integer.MIN_VALUE(最小值)

Integer.MAX_VALUE(最大值)

构造方法:

Integer(int value)
构造一个新分配的 Integer对象,该对象表示指定的 int值。
Integer(String s)
构造一个新分配 Integer对象,表示 int由指示值 String参数。

Integer i1 = new Integer(100);
Integer i2 = new Integer("200");

成员方法:

static parseInt

public class Test {
    public static void main(String[] args){
        String i = "100";
        int j = Integer.parseInt(i);     // 转换类型一般用这个,注意Character没有这个parseXxx方法
        System.out.println(j);
    }
}

更多还是看API文档吧。

  • 自动装箱与自动拆箱

public static void main(String[] args){
        int i = 10;
        Integer integer = new Integer(i);    // 装箱,将基本类型包装成对象,装箱
        
        int j = integer.intValue();          // 拆箱,将对象转换为基本数据类型
        
        Integer integer2 = 100;              // 自动装箱,把基本数据类型转换为对象(jdk5新特性)
        int k = integer + 100;               // 自动拆箱,把对象转换为基本数据类型(jdk5新特性)
        System.out.println(k);
    }
  • 补充一个坑:

自动装箱与自动拆箱有一个坑。

public static void main(String[] args){
        {
            int n1 = 10;
            int n2 = 10;
            Integer i1 = new Integer(n1);
            Integer i2 = new Integer(n2);
            System.out.println(i1 == i2);
            System.out.println(i1.equals(i2));
            System.out.println("-------------");
        }

        {
            Integer i1 = 127;
            Integer i2 = 127;
            System.out.println(i1 == i2);
            System.out.println(i1.equals(i2));
            System.out.println("-------------");
        }

        {
            Integer i1 = 128;
            Integer i2 = 128;
            System.out.println(i1 == i2);
            System.out.println(i1.equals(i2));
            System.out.println("-------------");
        }
    }

输出结果是:

false
true
-------------
true
true
-------------
false
true
-------------

为什么127是true,128就是false呢?

-128到127是byte的取值范围,如果在这个范围内,自动装箱不会新创建对象,而是从常量池中获取。如果超过了byte取值范围就会再创建对象。

源码:

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
原文地址:https://www.cnblogs.com/chichung/p/10233749.html