Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(二)

简介: Java包装类、方法传参机制都有什么值得注意的?来自《卷Ⅰ》的灵魂提问(二)

但是你可能就会有疑问了,如果我就使用一次包装类的话,它也会缓存创建范围内的所有对象,这样的话怎么实现节省内存提升性能呢?当然,包装类的cache缓存机制是针对大程序而言的概念,小程序并不能很好地体现。于是当确定同值对象使用的次数很少时,我们就可以使用构造器来创建包装类对象,因为缓存类只能通过valueOf方法才会生效

 你可能又有疑问了,使用自动装箱直接赋值的形式创建包装类对象会不会使用到缓存呢?答案是 会,因为自动装箱底层就是调包装类对应的valueOf方法,那么你是怎么确定的呢?对自动装箱和自动拆箱代码编译生成的字节码文件进行反编译得出下面的内容,根据12和19行得知:自动装箱调用的是valueOf方法,自动拆箱调用的是intValue方法


public class com.example.demo.code.AutoPacking {
  java.lang.Integer i1;
  int i2;
  public com.example.demo.code.AutoPacking();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: iconst_1
       6: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       9: putfield      #3                  // Field i1:Ljava/lang/Integer;
      12: aload_0
      13: new           #4                  // class java/lang/Integer
      16: dup
      17: iconst_2
      18: invokespecial #5                  // Method java/lang/Integer."<init>":(I)V
      21: invokevirtual #6                  // Method java/lang/Integer.intValue:()I
      24: putfield      #7                  // Field i2:I
      27: return
}


通过上面的分析,我们就可以很容易的得出上面那段代码的答案了

image.png

包装类的缓存范围


数据类型 包装类 缓存范围

整型 Byte、Short、Long、Integer [-128,127]

浮点型 Float、Double 无

字符型 Character [0,127]

布尔型 Boolean true、false


相关文章
|
6天前
|
Java
【Java】Math、System、RunTime、BigDecimal类常用方法
【Java】Math、System、RunTime、BigDecimal类常用方法
|
2天前
|
存储 Java
|
1天前
|
Java
java开启线程的四种方法
这篇文章介绍了Java中开启线程的四种方法,包括继承Thread类、实现Runnable接口、实现Callable接口和创建线程池,每种方法都提供了代码实现和测试结果。
java开启线程的四种方法
|
3天前
|
存储 SQL 关系型数据库
深入MySQL锁机制:原理、死锁解决及Java防范技巧
深入MySQL锁机制:原理、死锁解决及Java防范技巧
|
1天前
|
Java
成功解决:java: 找不到符号 符号: 方法 getSort() 位置: 类型为com.atguigu.gulimall.product.entity.CategoryEntity的变量 menu1
这篇文章讨论了Java中遇到的一个常见错误:"java: 找不到符号 符号: 方法 getSort() 位置: 类型为com.atguigu.gulimall.product.entity.CategoryEntity的变量 menu1",即在尝试调用一个不存在的方法时出现的问题,并提供了相应的解决方法。
|
3天前
|
存储 Java
|
5天前
|
Java API
Java8 Lambda 设计和实现问题之在Java 8的Stream API中,parallel=false时collect方法是如何实现的
Java8 Lambda 设计和实现问题之在Java 8的Stream API中,parallel=false时collect方法是如何实现的
|
5天前
|
Java 数据库连接 API
Java 的 SPI 机制
Java 的 SPI 机制
10 0
|
5天前
|
Java Spring 容器
Java SpringBoot 中,动态执行 bean 对象中的方法
Java SpringBoot 中,动态执行 bean 对象中的方法
14 0
|
6天前
|
Java API
【Java】Object、Objects、包装类、StringBuilder、StringJoiner
【Java】Object、Objects、包装类、StringBuilder、StringJoiner