包装类

1.为什么需要包装类?

Java并不是面向对象的语言。虽然我们常说Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的。而程序开发中,我们需要把字符串数据,根据需求转换成指定的基本数据类型,如年龄需要转换成int类型,考试成绩需要转换成double类型等。那么,想实现字符串与基本数据之间转换怎么办呢?
Java提供8种基本数据类型对应的包装类,使得基本数据类型变量具有类的特征。

2.使用包装的好处

可以提供更多的操作基本数值的功能。

3.包装类的分类

  • 数值型包装类(Number的直接子类):Byte、Double、Float、Short、Long、Integer
  • 对象型包装类(Object的直接子类):Boolean、Character(char)
    在这里插入图片描述

4.装箱和拆箱(以int类型来举例)

  • 装箱:将基本数据类型变为包装类对象。调用每个包装类提供的构造器
  • 拆箱:将包装类中包装的基本数据类型取出。利用xxValue( )方法
构造器功能
Integer(int value)构造一个新分配的Integer对象,它表示指定的int值
Integer(String s)构造一个新分配的Integer对象,它表示String参数所指的int值
成员方法功能
int intValue()以int类型返回该Integer的值
static int parseInt(String s)将字符串参数作为有符号的十进制整数进行解析
static String toString()返回一个表示该Integer值的int对象
    /**
     * 基本数据类型-->包装类
     */
    @Test
    public void test1() {
        int num1 = 10;
        Integer in1 = new Integer(num1);
        //Integer重写了toString()方法,所以输出in1的内容
        System.out.println(in1.toString());

        Integer in2 = new Integer("123");
        System.out.println(in2.toString());
    }

在这里插入图片描述

    /**
     * 包装类-->基本数据类型
     */
    @Test
    public void test2() {
        Integer in = new Integer(10);
        int num = in.intValue();
        //包装类是类类型的,所以不能做运算,能做运算就说明已转成基本数据类型
        System.out.println(num + 1);
    }

在这里插入图片描述

5.阿里编码规范:int or Integer?

  • 强制所有POJO类(简单Java类)属性必须使用包装类。
  • 强制RPC方法返回值和参数必须使用包装类
  • 推荐所有的局部变量使用基本类型

6.自动装箱与拆箱

以上操作采用的均是手工装箱和拆箱。在JDK1.5之后,提供了自动拆装箱的机制,最为重要的是,由于此类机制的存在,可以直接利用包装类的对象进行各种数学计算

public class Test {
    public static void main(String[] args) {
        Integer i = 10;//自动装箱
        System.out.println(i + 10);//20
    }
}

7.包装类与字符串的转换

7.1 String–>int
  • 方式1:int intValue()
public class Test01 {
    public static void main(String[] args) {
        Integer i = new Integer("10");
        int a = i.intValue();
        System.out.println(a + 10);//20
    }
}
  • 方式2: static int parseInt(String s)
public class Test02 {
    public static void main(String[] args) {
        int b = Integer.parseInt("10");
        System.out.println(b + 10);//20
    }
}
7.2 int–>String
  • 方式1:" "+基本数据变量
public class Test03 {
    public static void main(String[] args) {
        Integer i = new Integer(10);
        String s = "" + i;
        System.out.println(s + 10);//1010
    }
}
  • 方式2:String toString()
public class Test {
    public static void main(String[] args) {
        String s = Integer.toString(10);
        System.out.println(s + 10);//1010
    }
}
  • 方式3:调用String类提供的静态方法valueof(基本类型)【不产生垃圾空间,推荐使用】
public class Test {
    public static void main(String[] args) {
        Integer i = new Integer(10);
        String s = String.valueOf(i.intValue());
        System.out.println(s + 10);//1010
    }
}

8.面试题

package 转型;

import org.junit.Test;

/**
 * @BelongsProject: untitled
 * @BelongsPackage: 转型
 * @Author: mcc
 * @CreateTime: 2020-08-21 07:58
 * @Description:
 */
public class InterviewTest {
    @Test
    public void test1() {
        Object o1 = true ? new Integer(1) : new Double(2.0);
        System.out.println(o1);
        /**
         * 编译时要将类型统一,所以INteger提升为Double类型,所以执行后输出1.0
         */
    }

    @Test
    public void test2() {
        Object o2;
        if (true) {
            o2 = new Integer(1);
        } else {
            o2 = new Double(2.0);
        }
        System.out.println(o2);
        /**
         * 从上到下执行,由于是true只进入第一个括号,所以执行后输出1
         */
    }

    @Test
    public void test3() {
        /**
         * 首先,对于引用数据类型来说==均比较地址值
         */
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);//false
        /**
         * Integer内部定义了IntegerCache结构,IntegerCache定义了Integer[],
         * 保存了从-128~127范围的整数,如果我们使用自动装箱的方式,给Integer赋值
         * 范围在-128~127中时,可以直接使用数组中的元素,不用再去new了。目的:提高
         * 效率
         */
        Integer m = 1;
        Integer n = 1;
        System.out.println(m == 1);//true
        /**
         * x,y相当于各自new了一个Integer对象
         */
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);//false
    }
}

9.总结

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值