JAVA-包装类

一、八种数据类型对应的包装类
这里写图片描述

关系:
这里写图片描述

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

从 jdk 1.5 出现之后自动封箱和自动拆箱,就有编译器帮助完成!

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类, 包装类均位于java.lang包。

例:

public static void main(String[] args) {

        int restult = Integer.parseInt("123");

        System.out.println(Integer.MAX_VALUE);

        Integer integer = new Integer(123);
        integer.intValue();

        System.out.println(Integer.toBinaryString(-1));
        //10000000000000000000000001//原码
        //11111111111111111111111110 + 1//原码
        System.out.println(Integer.toHexString(-1));
        System.out.println(Integer.toOctalString(-1));

        integer = Integer.valueOf(123);
        //直接将高24位全部砍掉
        System.out.println(integer.byteValue());
        //jdk 1.5 出现了自动封箱和自动拆箱,编译器帮助完成。
//      Integer integer2 = 5; //自动封箱
        Integer integer2 = Integer.valueOf(5); //自动封箱
//      int i = integer2;//自动拆箱
        int i = integer2.intValue();
    }
### Java 面向对象编程中的包装 #### 包装的概念 Java 中的包装(Wrapper Class)是用来将基本数据类型封装成对象的一组。这些位于 `java.lang` 包中,允许开发者在需要时将基本数据类型转换为对象以便于操作[^1]。 以下是常见的基本数据类型及其对应的包装: | **基本数据类型** | **包装** | |-------------------|------------------| | byte | Byte | | short | Short | | int | Integer | | long | Long | | float | Float | | double | Double | | char | Character | | boolean | Boolean | #### 包装的作用 包装的主要目的是为了能够将基本数据类型作为对象来处理。这使得它们可以在集合框架(Collections Framework)和其他需要对象参数的地方使用。此外,包装还提供了一些有用的工具方法,方便数值的操作和转换[^2]。 #### 自动装箱与拆箱 自 Java 5 开始引入了自动装箱(Autoboxing)和自动拆箱(Unboxing)机制,简化了基本数据类型与其对应包装之间的转换过程。 - **自动装箱** 是指编译器会隐式地将基本数据类型转换为其对应的包装- **自动拆箱** 则是指编译器会隐式地将包装转换回其对应的基本数据类型。 ##### 示例代码 ```java Integer num = 10; // 自动装箱 int value = num; // 自动拆箱 ``` #### 包装的实现原理 包装本质上是对基本数据类型的封装。例如,`Integer` 内部维护了一个名为 `value` 的私有成员变量,用来存储实际的整数值。通过 getter 方法可以获取该值。 ##### 示例代码 ```java public final class Integer { private final int value; public Integer(int value) { this.value = value; } public int intValue() { return value; } } ``` 当调用 `new Integer(10)` 创建对象时,实际上是在内存中分配了一块空间并初始化了 `value` 成员变量。而自动装箱则是由 JVM 在后台完成这一过程,无需显式调用构造函数[^3]。 #### 常见用途 1. **集合框架支持**: 许多集合(如 ArrayList、HashSet 等)只接受对象作为元素,因此需要用包装代替基本数据类型。 2. **线程安全需求**: 某些场景下可能需要对共享的数据进行同步控制,此时包装提供了更好的解决方案。 3. **方法重载区分**: 不同签名的方法可以通过接收不同型的包装来进行区分。 4. **默认值设置**: 对象可以赋值为 null,而基本数据类型不具备此特性。 #### 性能考虑 尽管包装带来了便利性,在性能敏感的应用程序中应谨慎使用。因为每次装箱/拆箱都会涉及额外开销,并可能导致不必要的临时对象创建。对于循环体内的频繁运算尤其需要注意这一点[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值