java常用类--包装类
发布日期:2021-05-15 01:31:24 浏览次数:17 分类:精选文章

本文共 1607 字,大约阅读时间需要 5 分钟。

一、基本概念

基本数据类型在很多编程语言中都很常见,但它们并不具备对象的特性,比如不能调用方法。为了让这些基本数据类型能够像对象一样进行操作,Java为每个基本数据类型提供了一个包装类(Wrapper Class)。这样一来,基本数据类型就可以像对象一样被操作了。

Java中提供了8种基本数据类型的包装类,这些包装类都在java.lang包中。除IntegerCharacter类外,其他六个包装类的类名与对应的基本数据类型名称一致,区别只在于第一个字母是否大写。具体对应关系如下:

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

自动装箱与拆箱

自动装箱是指将基本数据类型自动转化为对应的包装类,这种做法符合Java的面向对象特性。相反,自动拆箱则是将包装类转化回对应的基本数据类型。

包装类常量池

每个包装类都有一个常量池,用来存储频繁使用的值。例如:

  • Byte 的常量池存储 -128 到 127。
  • Short 的常量池同样存储 -128 到 127。
  • Integer 的常量池则存储 -128 到 127。
  • Long 的常量池存储 -128 到 127。

值得注意的是,floatdouble 没有常量池,因为它们的精度较高,缓存值的范围会非常大。

举个例子来说明包装类常量池的作用:

public class IntegerDemo {
public static void main(String[] args) {
Integer n1 = 1; // 自动装箱,n1指向常量池中的一个Integer对象
Integer n2 = 1; // n1 和 n2 指向同一个对象
System.out.println(n1 == n2); // true
Integer n3 = new Integer(1); // n3 指向一个不同的对象
System.out.println(n1 == n3); // false
Integer n4 = 128; // 超过常量池范围,n4和n5 指向不同的对象
Integer n5 = 128;
System.out.println(n4 == n5); // false
}
}

Integer常量池的具体工作流程

当你使用 Integer i = 40; 时,JVM会先检查Integer包装类的常量池中是否有对应的值。如果有,则直接返回该对象的引用;如果没有,则新创建一个Integer对象并返回其引用。

二、基本类型与包装类之间的转换

基本类型到包装类的转换

  • 使用构造器
    Integer n = new Integer(10);
  • 使用 valueOf() 方法
    Integer n = Integer.valueOf(10);

包装类到基本类型的转换

  • 调用对应的 xxxValue() 方法
    Integer n = Integer.valueOf(10);
    int b = n.intValue();

三、面试

1. 基本类型与包装类型的区别

  • 基本类型存储在堆内,包装类型存储在栈内。
  • 包装类是对象,有方法和字段,调用是通过引用传递。
  • 基本类型使用值传递,包装类使用引用传递。

2. 为什么推荐使用 valueOf() 而不是 parseLong()?

  • Long 等包装类的 valueOf() 方法支持常量池缓存,能够减少资源消耗,而 parseLong() 没有这种机制。
上一篇:java常用关键字总结
下一篇:java常用类--String

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月13日 04时35分48秒