java包装器类型

本文围绕Java包装器类型展开。介绍了使用包装器类型的原因,因Java基本类型非面向对象,包装器可使其具对象性质。还阐述了Java的基本类型和引用数据类型的存储模型,以及装箱(基本转包装)和拆箱(包装转基本)的概念与实现方式。

一、为什么要使用包装器类型

  java是面向对象的语言,但基本类型并不是面向对象的,从而出现了包装器类型,并且包装器添加了更多的属性和方法。如我们在使用集合类型Collection的时候就一定要使用包装类型而非基本类型,它相当于将基本类型"包装起来",使它具有了对象的性质,丰富了基本类型的操作。

  java 的两大数据类型

  ● 基本类型(或者叫做内置类型)
  ● 引用数据类型

  基本类型:不存在"引用"的概念,基本类型都是直接存储在内存的内存栈上面,数据本身的值就存储在栈空间里面

  而Java语言里面只有这八种数据类型是这种存储模型;
  引用数据类型:“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。

二、什么装箱和拆箱

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

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

 三、装箱和拆箱是如何实现的?

  装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的 xxxValue方法实现的。(xxx代表对应的基本数据类型)。

  示例1:

  
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;

System.out.println(i1==i2);
System.out.println(i3==i4);

  输出结果:

    false

    false

  为什么都返回false呢,我们看下Double.valueOf()方法,就知晓了:

private final double value;

public Double(double value) {
   this.value = value;
}

public static Double valueOf(double d) {
   return new Double(d);
}

示例2:

Boolean i1 = false;
Boolean i2 = false;
Boolean i3 = true;
Boolean i4 = true;

System.out.println(i1==i2);
System.out.println(i3==i4);

输出结果

    true

    true

为什么都返回true呢,我们看下Boolean.valueOf()方法,就知晓了:

public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);

public static Boolean valueOf(boolean b) {
   return (b ? TRUE : FALSE);
}

 

转载于:https://www.cnblogs.com/zhangqingquan/p/10827377.html

<think>好的,用户想了解Java中的包装类型,包括定义、使用场景和示例。首先,我需要回忆包装类型的基本概念。包装类型是将基本数据类型封装成对象,比如Integer对应int,Double对应double等。接着,用户提到的使用场景应该包括泛、集合类、面向对象编程等方面,这些在引用内容都有提到。例如引用[1]指出泛和集合类必须使用包装类型,引用[4]也提到泛不支持基本类型。 然后,我需要组织回答结构,先定义包装类型,再列举使用场景,每个场景给出示例代码。要确保符合用户的要求,比如使用中文,LaTeX公式正确,生成相关问题。同时,引用需要自然地附在相关段落末尾,比如在泛部分引用[1][2][4]。 另外,注意用户提供的引用中有关于泛、集合类、单例模式等内容,但用户的问题集中在包装类型,所以需要筛选相关信息。例如引用[5]提到电商场景的单例模式,但可能与包装类型关联不大,可以忽略这部分。 最后,生成相关问题时要围绕包装类型,比如与基本类型的区别、自动拆装箱、性能影响等。确保问题相关且有深度,帮助用户进一步学习。</think>### Java包装类型详解 #### 一、定义 Java包装类型(Wrapper Class)是为八种基本数据类型提供的对象表示形式,使其能像对象一样参与面向对象编程。对应关系为: - 基本类型:$byte,\ short,\ int,\ long,\ float,\ double,\ char,\ boolean$ - 包装类型:$Byte,\ Short,\ Integer,\ Long,\ Float,\ Double,\ Character,\ Boolean$ #### 二、使用场景 1. **泛编程** Java机制要求类型参数必须是对象类型,例如: ```java List<Integer> list = new ArrayList<>(); // ✔️ 合法 List<int> list = new ArrayList<>(); // ❌ 编译错误 ``` 引用[1][2][4]明确指出泛无法直接使用基本类型,必须通过包装类型实现类型参数化[^1][^2][^4]。 2. **集合类存储** Java集合框架(如ArrayList、HashMap)只能存储对象类型: ```java Map<String, Integer> map = new HashMap<>(); map.put("age", 25); // Integer包装类型存储 ``` 3. **面向对象特性** 包装类型提供对象操作方法,例如: ```java Integer num = 127; String binary = Integer.toBinaryString(num); // 转换为二进制字符串 ``` 4. **空值表示** 包装类型允许null值,而基本类型不能: ```java Integer result = getFromDatabase(); // 可能返回null int value = result != null ? result : 0; ``` #### 三、代码示例 ```java // 自动装箱与拆箱 Integer a = 100; // 自动装箱(编译器生成Integer.valueOf(100)) int b = a; // 自动拆箱(编译器生成a.intValue()) // 类型转换方法 String str = "123"; int num = Integer.parseInt(str); // 字符串转基本类型 Integer wrappedNum = Integer.valueOf(str); // 字符串转包装类型 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值