java 装箱拆箱

装箱就是 自动将基本数据类型转换为包装器类型;
拆箱就是 自动将包装器类型转换为基本数据类型。

 下表是基本数据类型对应的包装器类型:

int(4字节)    Integer
byte1字节)   Byte
short2字节)  Short
long8字节)   Long
float(4字节)  Float
double8字节) Double
char2字节)   Character
boolean(未定) Boolean
package test;

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

        System.out.println("常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。");


        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;
        System.out.println(i1==i2);
        System.out.println(i3==i4);
        System.out.println("---(Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值小于等于127并且大于等于-128时才可使用常量池(包装类,赋值)----");

        /***********/


        Integer i01=59;  //在常量池里面,堆里面没有
        int i02=59;
        Integer i03=Integer.valueOf(59);//会返回IntegerCache[59 - (-128)];   缓存池里存了-127~128
        Integer i04=new Integer(59);//堆内存

        System.out.println(i01==i02);
        System.out.println(i02==i04);
        System.out.println(i01==i04);
        System.out.println(i01==i03);
        System.out.println(i03==i04);
        System.out.println("--valueOf  会返回IntegerCache[59 - (-128)];   缓存池里存了-127~128-----");


        /***********/

        Double d1 = 100.0;
        Double d2 = 100.0;
        Double d3 = 200.0;
        Double d4 = 200.0;

        System.out.println(d1==d2);
        System.out.println(d3==d4);


        System.out.println(
                "---Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现。因为:在某个范围内的整型数值的个数是有限的,而浮点数却不是。\n" +
                        "\n" +
                        "  注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。\n" +
                        "\n" +
                        "     Double、Float的valueOf方法的实现是类似的。----");


        /***********/


        String str0=new String("abc");//此时堆中常量池中各有一份abc
        String str1="abc";
        String str2="abc";
        String str3="a"+"b"+"c";
        String str4=new String("abc");
        String str5=new String("abc");

//用new String() 创建的字符串不是常量,不能在编译期就确定,当你new String("abc")时,
//其实会先在字符串常量区生成一个abc的对象,然后new String()时会在堆中分配空间,然后此时会把字符串常量区中abc复制一个给堆中的String,故abc应该在堆中和字符串常量区
        System.out.println(str1==str2);
        System.out.println(str1==str3);
        System.out.println(str1==str4);
        System.out.println(str5==str4);

        System.out.println("对于equals相等的字符串,在常量池中是只有一份的(str1和str2),在堆中则有多份(str4和str5)。");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值