Java零基础教学(10):包装类

简介: 【9月更文挑战第1天】Java零基础教学篇,手把手实践教学!

前言

在Java中,除了基本数据类型之外,还有与之对应的包装类(Wrapper Classes)。包装类允许基本数据类型拥有对象的特性,使得基本类型可以用于对象引用需要的地方,如集合框架中。

摘要

本文将介绍Java的包装类,包括它们的作用、如何使用以及与基本数据类型的区别。通过实际代码示例和案例分析,帮助读者理解包装类的使用场景和优势。

概述

Java的包装类是一组类,它们提供了基本数据类型的包装。每个基本数据类型都有一个对应的包装类:

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

源码解析

以下是Java包装类的一个使用示例:

public class WrapperClassExample {
   
    public static void main(String[] args) {
   
        Integer integerObject = new Integer(10);
        double doubleNum = 20.0;
        Double doubleObject = new Double(doubleNum);

        System.out.println("Integer object: " + integerObject);
        System.out.println("Double object: " + doubleObject);
    }
}

使用案例分享

考虑一个需要将用户输入的字符串转换为整数并存储在列表中的场景:

import java.util.ArrayList;
import java.util.List;

public class UserInputList {
   
    public static void main(String[] args) {
   
        List<Integer> numbers = new ArrayList<>();
        String userInput = "123";
        numbers.add(Integer.valueOf(userInput));
        System.out.println("Added number: " + numbers.get(0));
    }
}

应用场景案例

包装类在需要使用基本数据类型的哈希码(hashCode)时非常有用:

import java.util.HashSet;
import java.util.Set;

public class HashCodeUsage {
   
    public static void main(String[] args) {
   
        Set<Integer> set = new HashSet<>();
        Integer num1 = new Integer(100);
        Integer num2 = new Integer(100);

        set.add(num1);
        set.add(num2); // 这里不会添加重复元素,因为100的hashCode相同

        System.out.println("Set size: " + set.size());
    }
}

优缺点分析

包装类的优点包括:

  • 允许基本数据类型使用对象的方法和属性。
  • 可以用于需要对象引用的场合,如集合框架。

缺点包括:

  • 相比于基本数据类型,包装类使用更多的内存。
  • 频繁的创建和销毁包装类对象可能导致性能问题。

核心类方法介绍

包装类提供了许多有用的方法,如:

  • intValue(), doubleValue(), floatValue(), longValue(), shortValue(), byteValue(), charValue(), booleanValue():将包装类实例转换回基本数据类型。
  • equals(Object obj):比较两个包装类实例的值是否相等。

测试用例

以下是测试包装类自动装箱和拆箱特性的用例:

public class AutoboxingUnboxingTest {
   
    public static void main(String[] args) {
   
        Double d = 3.14; // 自动装箱
        double e = d; // 自动拆箱
        System.out.println("Double value: " + d);
        System.out.println("Primitive double value: " + e);
    }
}

针对如上示例代码,这里我给大家详细的代码剖析下,以便于帮助大家理解的更为透彻,帮助大家早日掌握。

这段Java代码演示了Java中的自动装箱(Autoboxing)和自动拆箱(Unboxing)特性。下面是对这段代码的逐行解释:

  1. public class AutoboxingUnboxingTest { :定义了一个名为AutoboxingUnboxingTest的公共类,这个类将包含我们的测试用例。

  2. public static void main(String[] args) { :这是Java程序的主入口点,即main方法。这个方法是静态的,可以在不创建类实例的情况下直接调用。

  3. Double d = 3.14;:这里展示了自动装箱。Java编译器自动将基本数据类型double的值3.14转换成Double对象。这是Java 5引入的自动装箱特性,允许基本类型和对应的包装类之间无缝转换。

  4. double e = d;:这里展示了自动拆箱。Java编译器自动将Double对象d转换回基本数据类型double并赋值给变量e。这是自动拆箱的过程,也是Java 5引入的特性。

  5. System.out.println("Double value: " + d);:使用System.out.println方法打印Double对象d的值。这里使用了字符串拼接来将文本和变量值组合在一起输出。

  6. System.out.println("Primitive double value: " + e);:使用System.out.println方法打印基本数据类型double的值e

这个测试用例演示了Java中自动装箱和自动拆箱的便捷性。自动装箱允许开发者在需要对象引用的地方使用基本数据类型的值,而自动拆箱则允许开发者在需要基本数据类型的地方使用包装类对象。

这种特性简化了代码,使得在对象和基本类型之间转换更加容易,但同时也需要注意,过度使用包装类可能会导致性能问题,因为每次自动装箱和拆箱都会创建或销毁对象。在性能敏感的应用中,应当谨慎使用。

#

小结

通过本文的学习,你应该已经了解了Java包装类的概念、用途和使用方法。包装类使得基本数据类型可以拥有对象的特性,这在很多情况下非常有用。

总结

Java包装类是Java语言中一个重要的组成部分,它们扩展了基本数据类型的功能。虽然使用包装类有一定的性能成本,但它们提供的灵活性和功能在很多编程场景中是非常有价值的。希望本文能够帮助你更好地理解和使用Java包装类。

目录
相关文章
|
3月前
|
Java 测试技术 数据处理
Java零基础教学(17):Java运算符详解
【8月更文挑战第17天】Java零基础教学篇,手把手实践教学!
55 4
|
25天前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
40 1
java制作游戏,如何使用libgdx,入门级别教学
|
2月前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
33 9
Java——包装类和泛型
|
26天前
|
前端开发 Java API
Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版
本文提供了一份详细的Swagger接口文档生成工具的使用教程,包括了导入依赖、配置类设置、资源映射、拦截器配置、Swagger注解使用、生成接口文档、在线调试页面访问以及如何设置全局参数(如token),旨在帮助Java开发者快速上手Swagger。
186 0
Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版
|
26天前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
82 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
25天前
|
Java
【Java】什么是泛型?什么是包装类
【Java】什么是泛型?什么是包装类
14 0
|
3月前
|
Java 程序员
【Java基础面试八】、为啥要有包装类?
这篇文章解释了Java中存在包装类的原因:为了让基本数据类型具备对象的特性,使得它们可以被用作对象,以符合Java"一切皆对象"的设计理念,并简化将基本数据类型作为Object类型参数传递的问题。
【Java基础面试八】、为啥要有包装类?
|
3月前
|
存储 缓存 Java
Java零基础教学(13):自动拆箱与自动装箱详解
【8月更文挑战第13天】Java零基础教学篇,手把手实践教学!
30 1
Java零基础教学(13):自动拆箱与自动装箱详解
|
3月前
|
算法 Java 测试技术
Java零基础教学(15):Java常量详解
【8月更文挑战第15天】Java零基础教学篇,手把手实践教学!
59 5
|
3月前
|
存储 Java 测试技术
Java零基础教学(14):Java变量详解
【8月更文挑战第14天】Java零基础教学篇,手把手实践教学!
21 2