Java 我们是否也有包装类的对象池?

Java 我们是否也有包装类的对象池?,java,string,class,wrapper,Java,String,Class,Wrapper,我想澄清几个问题。正如我所知,包装类也是最终的,是不可变的。那个么他们是否像String类那个样拥有对象池呢?还有包装类的可变版本吗?String类具有可变版本,如StringBuilder和StringBuffer。某些包装类(例如Long和Integer)具有某些值的缓存(对于Integer和Long,缓存用于-128和127之间的值),其行为类似于字符串池,但与字符串池不同,它是常量,因此,向其中添加新对象是不可能的 至于你的第二个问题,我假设这是一个输入错误,你的意思是问包装类是否有mu

我想澄清几个问题。正如我所知,包装类也是最终的,是不可变的。那个么他们是否像String类那个样拥有对象池呢?还有包装类的可变版本吗?String类具有可变版本,如StringBuilder和StringBuffer。

某些包装类(例如Long和Integer)具有某些值的缓存(对于Integer和Long,缓存用于-128和127之间的值),其行为类似于字符串池,但与字符串池不同,它是常量,因此,向其中添加新对象是不可能的

至于你的第二个问题,我假设这是一个输入错误,你的意思是问包装类是否有mutable版本,比如String有StringBuilder。答案是否定的。

一些包装类(例如Long和Integer)对某些值有缓存(对于Integer和Long,缓存用于-128和127之间的值),其行为类似于字符串池,但与字符串池不同,它是常量,因此无法向其中添加新对象


至于你的第二个问题,我假设这是一个输入错误,你的意思是问包装类是否有mutable版本,比如String有StringBuilder。答案是否定的。

我想详细说明一下Eran在回答中提到的缓存部分。这也将回答op在评论中提出的问题

  • 存在包装器布尔、字节、短、, 整数,长,字符类

  • 对于布尔类,缓存的实例是 可直接访问,因为只存在两个:静态常量Boolean.TRUE 和布尔值

  • Character类缓存值从0到127的实例

  • 值-127到的字节、短、整数和长缓存实例 128

  • Float和Double包装器类不存在缓存实例

  • 如果您请求这些类中任何一个的对象,则valueOf()方法将从此范围返回对预定义对象的引用:否则,它将创建一个新对象并返回其引用

    Example :- 
    
    Integer i1 = new Integer(10);
    Integer i2 = new Integer(10);
    
    Integer i3 = Integer.valueOf(10);
    Integer i4 = Integer.valueOf(10);
    
    Integer i5 = 10; // Autoboxing, internally autoboxing uses valueOf() method.
    Integer i6 = 10;
    
    System.out.println(i1 == i2);
    System.out.println(i3 == i4);
    System.out.println(i4 == i5);
    System.out.println(i5 == i6);
    
    
    O/P :- 
    false
    true - result is true because valueOf() returns a cached copy.
    true
    true
    

    我想详细说明一下Eran在回答中提到的缓存部分。这也将回答op在评论中提出的问题

  • 存在包装器布尔、字节、短、, 整数,长,字符类

  • 对于布尔类,缓存的实例是 可直接访问,因为只存在两个:静态常量Boolean.TRUE 和布尔值

  • Character类缓存值从0到127的实例

  • 值-127到的字节、短、整数和长缓存实例 128

  • Float和Double包装器类不存在缓存实例

  • 如果您请求这些类中任何一个的对象,则valueOf()方法将从此范围返回对预定义对象的引用:否则,它将创建一个新对象并返回其引用

    Example :- 
    
    Integer i1 = new Integer(10);
    Integer i2 = new Integer(10);
    
    Integer i3 = Integer.valueOf(10);
    Integer i4 = Integer.valueOf(10);
    
    Integer i5 = 10; // Autoboxing, internally autoboxing uses valueOf() method.
    Integer i6 = 10;
    
    System.out.println(i1 == i2);
    System.out.println(i3 == i4);
    System.out.println(i4 == i5);
    System.out.println(i5 == i6);
    
    
    O/P :- 
    false
    true - result is true because valueOf() returns a cached copy.
    true
    true
    

    还不太清楚您所指的是哪种包装器类。你能添加一些参考吗?@ralfstx:我是说像Integer、Double和Character@sotorios:Sry那是个打字错误。。我想问一下,是否有其他包装类的可变版本,就像String一样。不太清楚您所指的包装类是什么类型的。你能添加一些参考吗?@ralfstx:我是说像Integer、Double和Character@sotorios:Sry那是个打字错误。。我想问一下是否有其他包装类的可变版本,就像String一样。
    AtomicBoolean
    AtomicInteger
    AtomicLong
    可以用作包装类的可变版本,虽然这不是它们的主要用途,也没有自动装箱功能。@Eran:那么字符包装类呢?字符包装类也有缓存或常量池吗?
    AtomicBoolean
    AtomicInteger
    AtomicLong
    可以用作包装类的可变版本,尽管这不是它们的主要用途,也没有自动装箱功能。@Eran:字符包装类呢?我们是否也有用于字符包装类的缓存或常量池?