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() 方法会比较对象的实际值(通过显式方法调用),而非引用。

例子:

相关推荐
D***776514 小时前
适用于IntelliJ IDEA 2024.1.2部署Tomcat的完整方法,以及笔者踩的坑,避免高血压,保姆级教程
java·tomcat·intellij-idea
豆浆whisky14 小时前
Go并发模式选择指南:找到最适合你项目的并发方案|Go语言进阶(19)
开发语言·后端·golang
20岁30年经验的码农14 小时前
Spring Security 6.x 安全实践指南
java
草莓熊Lotso14 小时前
《算法闯关指南:动态规划算法--斐波拉契数列模型》--01.第N个泰波拉契数,02.三步问题
开发语言·c++·经验分享·笔记·其他·算法·动态规划
胖咕噜的稞达鸭15 小时前
自定义shell命令行解释器自制
java·开发语言
草莓熊Lotso15 小时前
Git 分支管理:从基础操作到协作流程(本地篇)
大数据·服务器·开发语言·c++·人工智能·git·sql
报错小能手15 小时前
C++异常处理 终极及总结
开发语言·c++
q***333718 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
tobebetter952721 小时前
How to manage python versions on windows
开发语言·windows·python
Y***h18721 小时前
第二章 Spring中的Bean
java·后端·spring