持续总结中!2024年面试必问 100 道 Java基础面试题(十八)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(十七)-CSDN博客

三十五、什么是包装类型?有什么用?

什么是包装类型?

在Java中,包装类型是指那些用于封装基本数据类型的类。Java为每个基本数据类型提供了对应的包装类型:

  • boolean - Boolean
  • byte - Byte
  • short - Short
  • int - Integer
  • long - Long
  • float - Float
  • double - Double
  • char - Character

包装类型的用途

  1. 对象实例: 基本数据类型是不可变的,并且不是对象。包装类型允许基本数据类型拥有对象的属性,例如可以为它们设置方法和属性。

  2. 集合框架: Java的集合框架(如ArrayListHashMap等)只能接受对象作为元素。包装类型允许基本数据类型作为集合的元素。

  3. 自动装箱与拆箱: Java 5引入了自动装箱(Autoboxing)和自动拆箱(Unboxing)特性,允许在基本数据类型和相应的包装类型之间无缝转换。

    Integer refInt = 5; // 自动装箱,基本类型int转换为Integer对象
    int num = refInt;   // 自动拆箱,Integer对象转换为基本类型int
  4. 使用类特有的方法: 包装类型提供了一些有用的方法,例如IntegertoString()parseInt()valueOf()等。

  5. 资源管理: 在需要对象而不是原始类型的地方,如try-with-resources语句,包装类型非常有用。

  6. 泛型和注解: 泛型和注解通常需要对象类型,包装类型在这些情况下可以满足要求。

  7. 枚举和正则表达式: 枚举类型和正则表达式等特性只能与对象一起使用,包装类型在这些情况下非常有用。

  8. 分布式对象: 在分布式系统中,基本数据类型不能直接在网络上传输,需要使用它们对应的包装类型。

示例代码

public class WrapperExample {
    public static void main(String[] args) {
        Integer integerObject = 100; // 自动装箱
        int primitiveInt = integerObject; // 自动拆箱

        List<Integer> intList = new ArrayList<>();
        intList.add(1);
        intList.add(2);
        intList.add(3);

        for (Integer num : intList) {
            System.out.println(num); // 输出集合中的每个Integer对象
        }
    }
}

在这个示例中,Integerint的基本数据类型对应的包装类型。示例展示了自动装箱和自动拆箱的过程,以及如何将包装类型对象放入集合中。

总结来说,包装类型在Java中非常有用,它们允许基本数据类型在需要对象的地方使用,同时提供了额外的方法和属性,增强了基本数据类型的功能。

三十六、什么是自动装厢、拆厢?

自动装箱(Autoboxing)

自动装箱是Java 5引入的一个特性,它允许将基本数据类型自动转换为对应的包装类类型。这意味着在需要对象的地方,可以直接使用基本数据类型的值,编译器会自动将这个值包装成对应的包装类对象。

例如:

Integer integerObject = 100; // 基本类型int自动装箱为Integer对象

在这个例子中,int类型的值100被自动装箱为Integer对象。

自动拆箱(Unboxing)

自动拆箱是自动装箱的逆过程,它允许将包装类类型的对象自动转换为对应的基本数据类型。这在使用对象的地方,需要基本数据类型值时非常有用。

例如:

int primitiveInt = integerObject; // Integer对象自动拆箱为基本类型int

在这个例子中,Integer对象被自动拆箱为int类型的值。

自动装箱和拆箱的用途

  • 简化代码:在集合框架、泛型、注解等需要对象的地方,自动装箱和拆箱简化了代码编写。
  • 类型转换:允许在基本数据类型和对象之间无缝转换,增强了代码的灵活性。

注意事项

  • 性能:虽然自动装箱和拆箱简化了代码,但过度使用可能会影响性能,因为它们涉及到对象的创建和垃圾收集。
  • null安全性:基本数据类型不能为null,但包装类对象可以。在自动拆箱时,如果尝试将一个null对象拆箱为基本数据类型,会抛出NullPointerException

示例代码

public class BoxingUnboxingExample {
    public static void main(String[] args) {
        // 自动装箱
        Integer integerWrapper = 123;
        Double doubleWrapper = 4.56;

        // 自动拆箱
        int intPrimitive = integerWrapper;
        double doublePrimitive = doubleWrapper;

        System.out.println("Integer wrapper to primitive: " + intPrimitive);
        System.out.println("Double wrapper to primitive: " + doublePrimitive);
    }
}

在这个示例中,1234.56是基本数据类型的值,它们被自动装箱为IntegerDouble对象。然后,这些包装类对象被自动拆箱为基本数据类型的变量。

总结来说,自动装箱和拆箱是Java中提高代码可读性和简化类型转换的有用特性,但在性能敏感的应用中应该谨慎使用。

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值