JavaSE学习(14):自动装箱和自动拆箱

一、概念

简单的说:

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

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

 例如  :

Integer i = 10;  //装箱
int n = i;   //拆箱

二、基本包装类引引入

2.1基本类型包装类的产生

在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的。而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等

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

常见操作之一:用于基本数据类型与字符串之间的转换

2.2 包装类的常用方法

2.3.1  Integer类其他方法

* 十进制转成二进制 toBinarString(int)

* 十进制转成八进制 toOctalString(int)

* 十进制转成十六进制 toHexString(int)

【注意】: 三个方法,返回值都是以String形式出现

public static void function_1(){
	System.out.println(Integer.toBinaryString(99));
    System.out.println(Integer.toOctalString(99));
	System.out.println(Integer.toHexString(999));
 }

Integer类的静态成员变量 MAX_VALUE MIN_VALUE(-128和127)

2.3.2 Integer的构造方法:

public Integer( int value)

public Integer ( String s): 注意:这个字符串由数字组成

public class Demo2 {
    public static void main(String[] args) {
        //方式1:
       int i=10;
       Integer ii =new Integer(10);
        System.out.println(ii);

        //方式2:
        String s= "111";//
        Integer iii =new Integer(s);
        System.out.println(iii);
    }
}

2.3.3 int类型和String类型的相互转换

public class Democrat {
    public static void main(String[] args) {
        //int -->String
        int number =100;

        //方式1:字符串拼接
        String s1=""+number;
        System.out.println(s1);

        //推荐方式2
        //方式2:String的方法:可以把任意类型的转换成字符串
        String s2 =String.valueOf(number);
        System.out.println("s2 = " + s2);

        //方式3
        Integer i= new Integer(number);
        System.out.println(i.toString());

        //方式4:
        String s4=Integer.toString(number);
        System.out.println(s4);
        System.out.println("-------------------------------");

        //String -->int
        String s="100";
        //方式1:
        //String--Integer---int
        Integer ii =new Integer(s);//把String类型转成Integer类型
        int x=ii.intValue();//把Integer类型转成int类型
        System.out.println(x);

        //方式2:很重要,同理,类似float
        //public static int parseInt(String s)
        int y=Integer.parseInt(s);
        System.out.println(y);
      
    }
}

三、装箱 和拆箱的原理

装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。

自动装箱,拆箱的 好处: 基本类型和引用类直接运算

【注意】:建议判断是否为null,然后再使用

自动装箱:

        使用Integer.valueOf(整数值)返回一个封装了该整数值的Integer对象,

        即把基本类型转为引用类型

自动拆箱:

       使用Integer对象.intValue()返回Integer对象中封装的整数值,

       把引用类型转为基本数据类型

四、几个题目

第一个:进行比较前会自动拆箱

class AutoUnboxingTest {

    public static void main(String[] args) {
        Integer a = new Integer(3);
        Integer b = 3;                  // 将3自动装箱成Integer类型
        int c = 3;
        System.out.println(a == b);     // false 两个引用没有引用同一对象
        System.out.println(a == c);     // true a自动拆箱成int类型再和c比较
    }
}

第二个:输出的结果是?

public class Test03 {

    public static void main(String[] args) {
        Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;

        System.out.println(f1 == f2);
        System.out.println(f3 == f4);
    }
}

这四个变量都是Integer对象引用,所以下面的==运算比较的不是值而7是引用。装箱的本质是什么呢?当我们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf.

所以整形字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以本题中f1==f2 的结果是true;f3==f4的结果是false

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值