Java——包装类

目录

[3.5 包装类](#3.5 包装类)


3.5 包装类

有时需要把基本类型转换为对象。所有基本类型都有一个与之对应的类。这些类称为包装器/类。这些类是不可变类,即一旦构造了包装器/类,就不允许改变包装在其中的值。其次包装类还是final,不用可以被继承。
为什么要有包装类:类当中可以定义方法,用于操作数据。基本数据类型没有操作数据的能力。所以这时候需要包装类。包装类是对基本数据类型的一个补充。
1、基本数据类型和包装类的对应关系:

2、int Integer String 之间的装换

  • int -> Integer:new Integer(int value) ; Integer.valueOf(int i)返回一个Integer型的对象。
  • Integer -> int:intValue() 返回 Integer 对象所包装的 int 值。
  • Integer ->String:toString() 返回表示该 Integer 对象数值的字符串。
  • String -> Integer:new Integer(String s)返回一个 Integer 对象,此对象包装了由字符串解析得到的 int 值。
  • int -> String:String.valueOf(int i) 返回表示该 int 值的字符串。
  • String -> int:Integer.parseInt(String s)返回表示该 int 值的字符串。
java 复制代码
public class ConversionExample {
    public static void main(String[] args) {
        // int -> Integer
        int num = 10;
        Integer integerObj1 = new Integer(num);
        Integer integerObj2 = Integer.valueOf(num);

        // Integer -> int
        int numFromInteger = integerObj1.intValue();

        // Integer -> String
        String strFromInteger = integerObj1.toString();

        // String -> Integer
        String str = "20";
        Integer integerObj3 = new Integer(str);

        // int -> String
        String strFromInt = String.valueOf(num);

        // String -> int
        int numFromString = Integer.parseInt(str);
    }
}

3、装箱:基本类型 -> 包装

java 复制代码
int a = 10;
Integer i = Integer.valueOf(a);
Integer j = new Integer(a);

4、拆箱:包装类 -> 基本类型

java 复制代码
Integer k = new Integer(10);
int b = k.intValue();

5、自动装箱:

java 复制代码
int c = 20;
Integer p_auto = c;
Integer m = 100;

6、自动拆箱:

java 复制代码
Integer l = new Integer(10);
int d_auto = l;
  1. 7、128陷阱

  2. 例子:

    num1取值在 [-128 , 127] 是true,否则false。因为Integer设置了缓存数组(缓存 [-128 , 127] 之间的所有整数,Integer型的数组)。如果自动装箱的数在 [-128 , 127] 之间,就直接返回缓存中的对象。否则,就会new一个对象。

java 复制代码
Integer num1 = 120;
Integer num2 = 120;
System.out.println(num1==num2);//true,指向同一个内存空间
Integer num3 = new Integer(100);
Integer num4 = new Integer(100);
System.out.println(num3==num4);//false
java 复制代码
Integer num1 = 150;
Integer num2 = 150;
System.out.println(num1==num2);//flase
Integer num3 = new Integer(100);
Integer num4 = new Integer(100);
System.out.println(num3==num4);//false

8.使用==判断包转类和基本数据类型是否相等时,包装类会自动拆箱,变成基本数据类型。此时,比较值是否相等。

9.包装类的 equals() 方法会比较对象的实际值(通过显式方法调用),而非引用。

例子:

相关推荐
daixin88482 分钟前
cursor无法正常使用gpt5.5等模型解决方案
java·redis·cursor
小短腿的代码世界3 分钟前
Qt文件系统与IO深度解析:从QFile到异步文件操作
开发语言·qt
韦禾水1 小时前
记录一次项目部署到tomcat的异常
java·tomcat
曦月合一1 小时前
树莓派安装jdk、tomcat、vnc、谷歌浏览器开机自启等环境配置
java·tomcat·树莓派
harder3211 小时前
RMP模式的创新突破
开发语言·学习·ios·swift·策略模式
jinanwuhuaguo1 小时前
OpenClaw工程解剖——RAG、向量织构与“记忆宫殿”的索引拓扑学(第十三篇)
android·开发语言·人工智能·kotlin·拓扑学·openclaw
Rust研习社1 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
此剑之势丶愈斩愈烈1 小时前
openssl 自建证书
java
面汤放盐2 小时前
何时使用以及何时不应使用微服务:没有银弹
java·运维·云计算
0xDevNull2 小时前
Spring Boot 自动装配:从原理到实践
java·spring boot·后端