91.Java自动装箱拆箱

自动装箱/拆箱

自动装箱:指开发人员可以把一个基本数据类型直接赋给对应的包装类。

自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型。

典型应用:

   List list = new ArrayList();

   list.add(1);

   //list.add(new Integer(1));

   int i=list.get(0);

   //int j = (Integer)list.get(0);

1.     基本数据类型包装类

                           

包装类 

  基本数据类型

Byte

byte

Short

short

Integer

int

Long

long

Boolean

boolean

Float

float

Double

double

Character

char

对象变基本数据类型:拆箱

基本数据类型包装为对象:装箱

为了使得java的基本类型有更多的功能,java为其所有的基本类型提供了包装类来封装常见的功能。如:最大值、数值转换等。

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

所属的包:java.lang.*

常见应用一:

获取最大最小值MAX_VALUE / MIN_VALUE

整数类型最大值

Integer.MAX_VALUE

System.out.println(Integer.MIN_VALUE);// -2147483648

System.out.println(Integer.MAX_VALUE);// 2147483647

应用二:

基本数据类型和字符串之间的转换

例:Integer的parseInt方法,intValue方法

基本数据类型转换成字符串:

1:基本数据类型+””

2:基本数据类型.toString(基本数据类型值);

例如  Integer.toString(34); //将34变成了”34”

基本数据类型转字符串

        int i=100;
        String str=100+"";
        String string = Integer.toString(100);

字符串变基本数据类型

基本数据类型 a=基本数据类型包装类.parse基本数据类型(String str);

     str="123";
        int parseInt = Integer.parseInt(str);
        System.out.println(parseInt);
         

注意: 

public static int parseInt(String s)
Integer类中的parseInt方法是静态的 参数必须是数字格式

Double

     str = "3.14";
        double parseInt2 = Double.parseDouble(str);
        System.out.println(parseInt2);

     boolean b = Boolean.parseBoolean("true");

应用三:

进制转换:

 十进制转成其他进制.

toBinaryString(int i) 
          以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。 
toHexString(int i) 
          以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。 
toOctalString(int i) 
          以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。 
那么其他进制转成十进制
parseInt(String radix);
parseInt(String s, int radix) 
          使用第二个参数指定的基数,将字符串参数解析为有符号的整数。 

十进制转其他进制

  

     // 十进制转二进制
        String binaryString = Integer.toBinaryString(100);
        System.out.println(binaryString); // 1100100
        // 十进制转十六进制
        String hexString = Integer.toHexString(100);
        System.out.println(hexString); // 64

        // 十进制转八进制
        String octalString = Integer.toOctalString(100);
        System.out.println(octalString); // 144

其他进制转十进制

     // 字符串转对应的进制
        int parseInt3 = Integer.parseInt(octalString);
        System.out.println(parseInt3);
        // 二进制转十进制
        int parseInt4 = Integer.parseInt(binaryString, 2);
        System.out.println(parseInt4);
        // 十六进制转十进制
        int parseInt5 = Integer.parseInt(hexString, 16);
        System.out.println(parseInt5);
        // 八进制转十进制
        int parseInt6 = Integer.parseInt(octalString, 8);
        System.out.println(parseInt6);

JDK5.0后出现了自动装箱和拆箱

JDK5.0以后,简化了定义方式。

     Integer x = new Integer(5);//装箱
        int intValue = x.intValue(); //拆箱

        // 5.0简化书写
        // 自动装箱。new Integer(5);
        Integer y = 5;  
        // 对象加整数,x 进行了自动拆箱,变成了int 型 和5进行加法运算后再将和进行装箱赋给x。
        y = y + 5; // 是通过Integer.intValue() 方法进行拆箱

练习:

public static void main(String[] args) {
        Integer a = 127;
        Integer b = 127;
        System.out.println(a == b);

        Integer c = 128;
        Integer d = 128;
        System.out.println(c == d);
    }

请问结果?

   a==b 为true 因为a和b指向了同一个Integer 对象.

   Integer的缓存大小-128 ~127 之间也就是byte的范围。

author@nohert
原文地址:https://www.cnblogs.com/gzgBlog/p/13624507.html