`
m635674608
  • 浏览: 5042775 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Integer 缓存池

    博客分类:
  • java
 
阅读更多
public class IntegerTest {
    public static void main(String[] args) {    
        objPoolTest();
    }

    public static void objPoolTest() {
        Integer i1 = 50;
        Integer i2 = 50;
        Integer i3 = 0;
        Integer i4 = new Integer(50);
        Integer i5 = new Integer(50);
        Integer i6 = new Integer(0);
        
        System.out.println( (i1 == i2));//初始变量时返回缓冲池的同一对象所有true;
        System.out.println(  (i1 == i2 + i3));相加,拆箱。所有相等。
        System.out.println( (i4 == i5));不同对象,所有不等
        System.out.println( (i4 == i5 + i6));    //相加拆箱。所以相等!
        
    }
}

  true
true
false
true

/**
     * Returns a <tt>Integer</tt> instance representing the specified
     * <tt>int</tt> value.
     * If a new <tt>Integer</tt> instance is not required, this method
     * should generally be used in preference to the constructor
     * {@link #Integer(int)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  i an <code>int</code> value.
     * @return a <tt>Integer</tt> instance representing <tt>i</tt>.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
        return new Integer(i);
    }

 

分享到:
评论

相关推荐

    Integer缓存池案例1

    【Integer缓存池案例1】 在Java编程中,Integer对象的使用涉及到缓存池的概念。Integer类在JDK中提供了缓存机制,用于优化Integer对象的创建和使用,特别是对于小数值。当我们在程序中创建Integer对象时,如果值在-...

    Java 基础.pdf_电子版pdf版

    在Java 8中,Integer缓存池的大小默认为-128到127,这个范围可以通过系统属性"java.lang.Integer.IntegerCache.high"进行调整。 ```java public static Integer valueOf(int i) { if (i &gt;= IntegerCache.low && i ...

    Java基础教程2023年最新整理

    * Integer 缓存池:默认范围为 -128 到 127 * Boolean 缓存池:只有两个值:true 和 false * Byte 缓存池:所有的 byte 值 * Short 缓存池:所有的 short 值 * Char 缓存池:所有的 char 值 四、结论 Java基础教程...

    cyc学习笔记.pdf

    1. **Integer缓存池**:在-128到127的整数值范围内,Integer对象会复用已存在的实例,避免重复创建。这是因为Integer类中有一个私有的静态内部类IntegerCache,它缓存了这些预定义的Integer对象。当创建一个新的...

    学习笔记 java\CoreJava笔记\CoreJava_day10

    需要注意的是,Java中存在一个Integer缓存池,用于存放-128到127之间的Integer对象,当在这个范围内的整数进行装箱时,会从缓存池中获取或复用对象,以提高效率。而String常量池与此不同,它是在运行时动态创建的,...

    Java 22道基础面试题.docx

    12. **Integer缓存池**:Integer对象在-128到127之间时会从缓存池中获取,因此如果i1和i2都在此范围内,它们可能是同一个对象,相等;否则,它们是不同对象,不相等。 13. **位运算符**:&(按位与),|(按位或)...

    Integer类的缓存机制

    `这行代码中,由于110在Integer缓存的范围内(-128到127),所以Integer#valueOf(int i)方法会从缓存中获取已经存在的110对应的Integer对象,因此a和b指向的是同一个对象,`a == b`的结果为`true`。 而在`Integer c...

    面试题 Java 基础总结了经常会被面试官问的问题

    - **Integer缓存池**:-128到127的Integer对象会被缓存,提高效率。 - **设计模式**:如单例模式、工厂模式、观察者模式等。 - **反射**:运行时动态创建对象和调用方法。 - **强引用、弱引用、虚引用和幻象引⽤...

    面试中很多人走过的坑,看完让你知道Integer和Int

    在这个过程中,如果装箱的整数值在-128到127之间,Java会使用Integer缓存池。这是为了性能考虑,因为重复装箱相同的值会复用已存在的对象。例如: ```java Integer m = 1; Integer n = 1; System.out.println(m == ...

    JAVA-int和Integer的区别1.zip

    在缓存和常量池方面,`Integer`类提供了一个缓存机制,用于存储-128到127之间的整数值。这意味着在这个范围内创建`Integer`对象时,如果已有相同的值存在,就会复用已存在的对象,避免了重复的内存分配。这个特性在...

    55丨享元模式(下):剖析享元模式在JavaInteger、String中的应用1

    这是因为Integer类内部有一个缓存池,即IntegerCache,它预先创建了-128到127之间的所有Integer对象。当我们调用valueOf()方法时,如果值在这个范围内,就会从缓存池中获取对象,而不是每次都new一个新的对象。例如...

    JVM常量池教程吐血整理干货.md

    Java中的一些基本数据类型的包装类(如`Integer`、`Byte`、`Character`、`Long`和`Short`)提供了缓存池来存储数值范围内的对象。这些缓存池的主要作用是为了提高性能,因为可以直接复用已存在的对象,而不是每次都...

    学习截图.docx

    对于-128到127这个范围内的值,装箱操作不是每次都创建新的对象,而是直接从预先创建的缓存池中获取。这称为"Integer池"或"Integer缓存"。这样做是为了避免频繁的`new Integer()`操作,因为创建新对象会消耗一定的...

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 ... * 使用场景:String 类型,连接池 * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象

    Java memcache缓存实现for Windows.pdf

    2. `setServers(String[] servers)`: 设置连接池中可用的缓存服务器列表,每个条目应包含IP地址和端口号,如"127.0.0.1:11211"。 3. `setWeights(Integer[] weights)`: 设置各个服务器的权重,权重对应于服务器列表...

    Java基础面试总结复习.md

    1. **缓存池**:Java为某些基本数据类型的包装类(如`Integer`)提供了一个缓存池,用于存储常用值。当创建新对象时,如果该值已经在缓存池中,则返回缓存池中的对象引用,而不是新建对象。 2. **实例化区别**: - ...

    Java 基础(2-8) - 知识点.pdf

    在Java中,Integer类提供了一个缓存池,用于存储-128到127之间的Integer对象。通过Integer.valueOf()方法获取这些范围内的数值时,会从缓存池中直接获取或复用对象,而不是每次都创建新的对象。例如: ```java ...

    spring结合redis如何实现数据的缓存

    factory.setPort(Integer.parseInt(port)); // ...其他配置 return factory; } @Bean public RedisTemplate, Object&gt; redisTemplate(JedisConnectionFactory factory) { RedisTemplate, Object&gt; template = ...

    Java memcache缓存实现for Windows.docx

    例如,`setServers(String[] servers)`用于设置服务器列表,而`setWeights(Integer[] weights)`用于设置每个服务器的权重,这在负载均衡中非常重要。 - `setInitConn(int initConn)`: 设置每个服务器的初始连接数,...

Global site tag (gtag.js) - Google Analytics