03_包装类

一、包装类

基本数据类型和包装类型的对应关系:

二、类型转换

装箱:把基本类型转换为引用类型;拆箱:引用类型转换为基本类型

public class demo01 {
    public static void main(String[] args) {
//        基本类型
        int number = 10;

//        类型转换:基本类型转换成引用类型
        Integer integer1 = Integer.valueOf(number);
        System.out.println(integer1.getClass());
        
//        类型转换:引用类型转换成基本类型
        int i = integer1.intValue();
        System.out.println(i);

        
        
        //JDK1.5之后自动装箱、自动拆箱
        int number2 = 30;
        Integer integer2 = number2;
        int i2 = integer2;
        System.out.println(integer2.getClass());
        System.out.println(i2);
    }
}
parseXXX()静态方法

XXX表示一种类型(八种基本类型),该方法可实现字符串基本类型的转换。要注意字符串转基本类型时,boolean字符串形式,只有字符串为"true"时,转换的基本类型才为true,否则为false。

public class demo02 {
    public static void main(String[] args) {

//        基本类型转字符串
        int num = 10;
        //1.1 直接+""
        String str1 = num + "";
        //1.2 使用Integer中的toString()方法
        String str2 = Integer.toString(num);

        System.out.println(str1.getClass());
        System.out.println(str2.getClass());


//        字符串转换基本类型
        String str3 = "20";
        //使用Integer.parseXXX()
        int i1 = Integer.parseInt(str3);
        System.out.println(i1);

        //boolean字符串形式转成基本类型,"true"--->true, 非"true"--->false
        String str4 = "true";
        String str5 = "treu";
        boolean b1 = Boolean.parseBoolean(str4);
        boolean b2 = Boolean.parseBoolean(str5);
        System.out.println(b1);
        System.out.println(b2);
    }
}

三、Integer缓冲区

public class demo03 {
    public static void main(String[] args) {
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1 == integer2);	//false

        Integer integer3 = 100;
        Integer integer4 = 100;
        System.out.println(integer3 == integer4);	//true

        Integer integer5 = 200;
        Integer integer6 = 200;
        System.out.println(integer5 == integer6);	//false
    }
}

"=="对基本类型比较的是值,对引用类型比较的是地址。

integer1和integer2结果为false:引用类型比较的是地址而不是值,很明显integer1和integer2地址不同;

integer3和integer4结果为true:这里对这两个对象赋值采用的是java的自动装箱,调用了Integer.valueOf()方法,100在cache[]的范围内,cache[]是直接存储在堆中的,所以可以直接取值。

integer5和integer6结果为false:虽说和”integer3和integer4“的方法是一样的,但是因为调用的Integer.valueOf()方法,超过了valueOf()方法的范围,所以就是new了一个引用,所以指向的地址就不用。

valueOf()源码:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

这里low=-128,high=127,存在一个Integer类型的cache[]数组。

posted @ 2024-07-26 00:05  美的梦里国  阅读(38)  评论(0)    收藏  举报