【Java19】包装类

基本类型包装类

Java是面向对象的编程语言,但也包含了8种基本数据类型。这8种基本数据类型不支持面向对象的编程机制:没有成员变量、方法可以调用。这是Java为了照顾程序员传统习惯保留的。

  • 所有引用类型的变量都继承自Object类,但是基本数据类型不是;
  • 为解决这几种基本数据类型不能被当成Object类型变量使用的问题,Java提供了一种包装(Wrapper)机制,给这8种基本数据类型分别定义了相应的引用类型,并称之为基本数据类型的包装类。
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

早期Java提供的基本类型变量和包装类对象之间的转换比较麻烦。现在大幅简化了,JDK1.5以后提供了自动装箱(autoboxing)和自动拆箱(autounboxing)功能。

  • 所谓自动装箱,就是可以把一个基本数据类型直接赋值给对应的包装类变量,或者赋给Object变量;
  • 自动拆箱,则是指可以把包装类对象直接赋值给对应的基本类型变量。
java 复制代码
public class Test
{
    public static void main(String[] args)
    {
        // 自动装箱
        Integer inObj = 5;
        Object boolObj = true;
        // 自动拆箱
        int it = inObj;
        if (boolObj instanceof Boolean boolWrap)
        {
            // 将Boolean类型变量赋给boolean变量
            boolean b = boolWrap;
            System.out.println(b);
        }
    }
}

自动包装和拆装必须注意类型匹配。利用这个机制,开发者可以把基金类型变量"近似"当成对象是用;返回来也可以把包装类的实例"近似"当成基本类型变量使用。

基本类型与字符串的转换

包装类可以把字符串类型的值转换为基本类型的值,有两种方式:

  1. 利用包装类提供的parseXxx(String s)类方法(除Character之外所有包装类都提供了该方法);
  2. 利用包装类提供的valueOf(String s)类方法。

String类也提供了重载的valueOf()方法用于将基本类型变量转换成字符串。

java 复制代码
public class Test
{
    public static void main(String[] args)
    {
        var intStr = "123";
        // 把字符串转换为int变量,两种方式
        var it1 = Integer.parseInt(intStr);
        var it2 = Integer.valueOf(intStr);
        //------
        var floatStr = "4.56";
        // 把字符串转换为float变量
        var ft1 = Float.parseFloat(floatStr);
        var ft2 = Float.valueOf(floatStr);
        //------
        // 把float变量转换为String
        var ftStr = String.valueOf(2.345f);
        // 把double变量转换为String,重载的valueOf
        var dbStr = String.valueOf(3.344);
    }
}

把基本类型变量转换为字符串还有一种更简单的方法:将基本类型变量与空字符串""连接起来。系统自动实现类型转换。

java 复制代码
var itStr = 5 + ""; // itStr是String"5"

如果要比较包装类的数值大小,有两种方式:

  1. 包装类的实例可以直接和数值型比大小。
java 复制代码
var a = Integer.valueOf(5);
System.out.println("包装类实例a的值和5.0的大小:" + (a > 5.0));
  1. 两个包装类的实例比较。因为包装类实际上是引用类型,也就是本质上是指针。只有指向同一个对象时才会返回true。这时,Java 7提供了compare类方法。所有包装类都有这个方法。
java 复制代码
System.out.println(Integer.compare(5, 4)); // 大于输出1,等于输出0,小于输出-1
相关推荐
考虑考虑4 小时前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天7 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天8 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源