栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

包装类(类型转换、装箱、拆箱)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

包装类(类型转换、装箱、拆箱)

1.包装类

Java分为两大数据类型:

基本数据类型、引用数据类型

(基本 数据类型不支持方法调用和访问属性)

基本类型对应的包装类(位于java.lang包中)
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
char

Character

booleanBoolean

基本包装类型是引用数据类型,不是基本数据类型!!!

应用数据类型:数组、类、接口、枚举、注解

某些场景下不能使用基本数据类型,只能使用引用数据类型

1. 泛型里,只能使用引用数据类型,不能使用基本数据类型

        List报错  List不报错

2. 数据库里,如果一个数据没有值,默认是null,此时如果Java里使用的是int类型,会报错!

        int x =null;报错  Integer x = null;不报错

3. 当需要一个Object[] 数组时,不能使用  基本数据类型数据,而要使用  引用数据类型数组

        Object[] objects = new int[]{1,2,3}; 报错

        Object[] objects = new Integer[]{1, 2, 3}; 不报错

2. 装箱、拆箱

装箱: 基本数据类型包装成为 基本包装类型 int-->Integer

拆箱: 基本包装类型拆成 基本数据类型 Integer --> int

基本数据类型和引用数据类型的区别:

        基本数据类型不能调用方法,也不能访问属性;

        引用数据类型可以调用方法,访问属性

int x1 = 10;
Integer x2 = new Integer(x1);  // 使用 Integer的构造方法创建一个 Integer类型的对象
Integer x3 = Integer.valueOf(x1);  // 调用 Integer类的 valueOf()静态方法,将基本数据类型转换成为引用数据类型
Integer x4 = x1;  // 最常用,自动装箱
System.out.println(x4.toString());

Integer y1 = 9;
int y2 = y1;  // 自动拆箱
int y3 = y1.intValue();  // 调用 intValue()方法手动拆箱

int a = 8;
Object b = a;  // 自动装箱和多态

int[] arr1 = new int[]{1, 2, 3};   // 数组也继承自Object
Object c = arr1;  // 多态

Integer[] arr2 = new Integer[]{4, 5, 6};
Object d = arr2;  // 多态

// objects是一个数组,数组里存储的都是 Object类型的对象
// Object[] objects = new int[]{1, 2, 3};
Object[] objects = new Integer[]{1, 2, 3};
3. 基本数据类型转换成为字符串
  1. 使用  + 将基本数据类型和字符串拼接,例如 String x = 1 + "";得到的结果x就是个字符串。
  2. 调用包装类的  toString 方法,例如 Integer a = 1; String b = a.toString();得到的结果是一个字符串。
  3. 调用String类的  valueOf 方法,例如String x = String.valueOf(1);得到的结果是一个字符串。
4. 字符串转换成为基本数据类型

基本包装类型里基本上都有 parseXXX方法,将字符串转换成为指定的基本数据类型。

byte a = Byte.parseByte("34");
short b = Short.parseShort("45");
int c = Integer.parseInt("123");
long d = Long.parseLong("456");
float e = Float.parseFloat("2.18");
double f = Double.parseDouble("3.14");
boolean g = Boolean.parseBoolean("true");

注意:如果传入的字符串不是一个合法的基本数据类型,会抛出NumberFormatException 异常

5. 自动装箱和拆箱的注意事项:

Integer是引用数据类型,引用数据类型支持 == 运算,所以两个 Integer做 == 运算,不会拆箱! 引用数据类型使用 == 比较的是 内存空间 整数如果在 [-128,127] 之间,在内存里有一个常量区,所有的 [-128,127] 之间的数字都指向这一块内存

public class BoxingDemo {
    public static void main(String[] args) {
        // Integer 是引用数据类型
        Integer i1 = 5;  // 自动装箱,把基本数据类型包装成为了引用数据类型
        System.out.println(i1 + 3); // 自动拆箱,把引用数据类型拆成了基本数据类型然后做算术运算

        Integer i2 = 7;
        System.out.println(i1 > i2);  // 把i1和i2拆箱变成基本数据类型比较
        System.out.println(i1 < i2);

        Integer i3 = 5;
        // 对象之间使用==比较,比较的是地址
        System.out.println(i1 == i3);  // 不会拆箱,把i1和i3当做对象来比较

        Person p1 = new Person("张三", 18, "男");
        Person p2 = new Person("李四", 20, "女");
        // System.out.println(p1 + 3);
        // System.out.println(p1 > p2);
        // System.out.println(p1 == p2);

        
        Integer x = 300;
        Integer y = 300;
        System.out.println(x == y); // false
        // 禁止 使用 == 对引用数据类型进行比较!!!
        System.out.println(x.equals(y));  // true

        Integer m = 3;  // 装箱
        // m += 2; // 拆箱 + 装箱
        // m = Integer.valueOf(m.intValue() + 2);
    }
}
6. 常见方法和属性

Integer里常见的方法和属性:

        MIN_VALUE: int类型的最小值 -2的31次方

        MAX_VALUE: int类型的最大值 2的31次方-1

        实例方法,需要创建实例对象再使用

                  intValue(): 拆箱,把基本包装类型拆箱成为基本数据类型

        静态方法,直接使用类名调用

把字符转换成为数字:

        valueOf(int x)/valueOf(String s)/ valueOf(String s,int radix):

                将int类型的值 装箱成为基本包装类型,也可以将字符串转换成为基本包装类型

                radix 表示进制,取值范围是 [2,36]

        parseInt(String s) / parseInt(String s,int radix):

                        将字符串转换成为int类型的值

                valueOf和parseInt无论是什么进制的字符串都变成十进制

把数字转换成为字符串:

        toBinaryString(int x) / toOctalString(int x) / toHexString(int x):

                把整数转换成为 指定进制的字符串

        int a = 45; String s = a + "";

public class BoxMethod {
    public static void main(String[] args) {
        Integer i = 15;

        System.out.println(Integer.MIN_VALUE);
        System.out.println(Integer.MAX_VALUE);

        String s = "123";  // 把字符串转换成为数字
        System.out.println(s + 1);  // "1231"
        int x = Integer.valueOf(s);

        int a = Integer.valueOf("2b", 30);
        System.out.println(a);

        System.out.println(Integer.toBinaryString(34));
        System.out.println(Integer.toOctalString(89));
        System.out.println(Integer.toHexString(93));


        int m = 56;
        String s1 = m + "";  // 将数字转换成为字符串
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013525.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号