`

Integer.valueOf 缓存

 
阅读更多

 

(转)http://topmanopensource.iteye.com/blog/663414

/** 

    * 在JDK1.5的基本类库中,对一些不可变类,如Integer类做了优化,它具有一个实例缓存,用来存放程序中经常使用的Integer实例。 

    * 如Integer中valueOf()方法。 

    * valueOf源代码如下:

    *  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);

    *  }

    * 在i在-128和127之间,第一次调用时创建Integer对象,非第一次从缓存中获取数据。 

    * 由此可见在程序中采用value()静态方法可以提供效率。 

    * 故在i不再-128到127之间时Integer.valueOf相等于new Integer()对象。

    */

        Integer a=Integer.valueOf(2);

        Integer b=Integer.valueOf(2);

        Integer c= new Integer(2);

        Integer d=new Integer(2);

        Integer aa=Integer.valueOf(234);  

        Integer bb=Integer.valueOf(234);  

 

        Integer cc= new Integer(234);  

        Integer dd=new Integer(234);  

 

 

        System.out.println("(a==b) ? "+(a==b));  

        System.out.println("(c==d) ? "+(c==d));  

        System.out.println("(aa==bb) ? "+(aa==bb));  

        System.out.println("(cc==dd) ? "+(cc==dd));  

        //输出结果如下 :  

        //      (a==b) ? true  

        //      (c==d) ? false  

        //      (aa==bb) ? false  

        //      (cc==dd) ? false  

        //      (cc==aa) ? false  

分享到:
评论

相关推荐

    Java Integer.ValueOf()的一些了解

    从源码中我们可以看到,Integer.ValueOf()方法首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,否则就创建一个新的Integer对象。 那么,IntegerCache是...

    Java中Integer.valueOf,parsetInt() String.valueOf的区别和结果代码解析

    它和Integer.parseInt()方法的区别在于,Integer.valueOf()方法会根据int范围从[-127,127]的内部缓存中取值,这样可以提高性能。同时,Integer.valueOf()方法也会抛出NumberFormatException异常,如果字符串是null...

    Java Integer.valueOf()和Integer.parseInt()的区别说明

    Integer.valueOf() 方法有一个缓存机制,对于 -128 到 127 之间的整型数字,会从缓存中获取,而不是新建对象。这个缓存机制可以提高性能,但也需要注意其使用时的限制。 例如,在比较一个字符串数字是否与某个整型...

    【Java学习】Integer.ValueOf()引发的血案

    总的来说,理解`Integer.valueOf()`的工作原理和`Integer`对象的缓存机制,是掌握Java中高级特性和优化性能的关键。在编写代码时,尤其是涉及到大量对象创建和比较时,了解这些细节可以帮助写出更高效、更符合预期的...

    java中string和int型的相互转换.doc

    - **`Integer.valueOf().intValue()`**:先创建一个`Integer`对象,再从中获取`int`值。 - **性能方面**: - **`Integer.parseInt()`**:由于不涉及对象创建,性能更高。 - **`Integer.valueOf().intValue()`**:...

    Valueof_JAVA源码_java_

    例如,`Integer.valueOf(int i)`会在-128到127的范围内直接返回缓存的`Integer`对象,以避免重复创建对象。 在编程实践中,理解`valueOf`方法不仅有助于写出更高效、简洁的代码,还能帮助我们在处理数据类型转换时...

    张海 复习1

    另一方面,对于-128到127之间的Integer对象,Java提供了缓存机制,因此`Integer.valueOf(-128) == Integer.valueOf(-128)`为真。对于大于127的值,如`Integer.valueOf(128)`,缓存行为未定义,因此比较结果不确定。...

    Java中Integer两种转int方法比较

    在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。理解这两种方法的区别和应用场景对于编写高效且正确的Java代码至关重要。 首先,我们来...

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

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) ... * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象

    Java面向对象(高级)- 包装类(wrapper)的使用

    - `valueOf` 方法:`Integer num = Integer.valueOf(100);`,推荐使用此方法,因为它可以复用已有的对象,减少内存开销。 - 拆箱(unboxing):将包装类对象转换回基本数据类型。 - 直接赋值:`int i = num;` - ...

    Java 基础.pdf_电子版pdf版

    当使用valueOf方法创建Integer对象时,如果值在缓存范围内,会直接从缓存中获取,否则新建一个对象。例如: ```java Integer x = new Integer(123); // 新建对象 Integer y = new Integer(123); // 新建对象,即使...

    第7讲 int和Integer有什么区别1

    查看`Integer`的源码可以帮助我们更深入地理解其内部机制,比如`Integer.valueOf()`方法如何实现值缓存,以及`Integer`对象的比较操作是如何进行的。 6. **扩展讨论**: - 自动装箱/拆箱发生的时间:这些操作发生...

    15Java语法糖与Java编译器1

    Integer.valueOf方法内部有缓存机制,当int值在一定范围内时,会直接返回缓存的对象,以减少对象创建的开销。这里的缓存范围是由IntegerCache的low和high参数决定的,通常情况下,low为-128,high为127,这是因为-...

    Integer类的缓存机制

    `Integer.valueOf(int i)`方法的源码中有一个对`IntegerCache`的引用,这是一个静态内部类,它维护了一个缓存数组,用于存储这个范围内的Integer对象。这样,当多次调用`valueOf`方法并传入相同的值时,就可以避免...

    src02 Integer

    10. **Integer.valueOf(int i)**: 这个静态方法根据`int`值`i`返回一个`Integer`对象。如果`i`在缓存范围(-128到127)内,它将从`IntegerCache`获取对象,否则创建新的`Integer`实例。 11. **XXXValue**: 这可能是...

    android string转换为int

    两者的区别在于 `Integer.valueOf()` 可以用于缓存小范围(-128 到 127)内的整数值,提高性能。 ```java String str = "456"; int num = Integer.valueOf(str); ``` 三、`TextUtils.parseInt()` 如果你在使用...

    java中Integer包装类装箱的一个细节详解

    `时,编译器实际上会自动转换为`Integer i = Integer.valueOf(20);`这一过程称为装箱。同样,当我们使用`int j = i;`时,编译器会处理成`int j = i.intValue();`这就是拆箱。这个机制使得整数对象的使用更加便捷。 ...

    通过实例了解Java Integer类和int的区别

    Integer.valueOf()方法会将int类型的值装箱到Integer对象中,并且在-128到127之间的值会被缓存,以提高性能。 知识点3:Integer比较 在比较两个Integer对象时,我们应该使用equals()方法,而不是==操作符,这是...

    Integer IntegerCache源码阅读

    当 `Integer.valueOf()` 被调用时,如果传入的整数值在这个范围内,那么它会直接从缓存中获取已存在的对象,否则会新建一个 `Integer` 对象。 让我们详细分析一下 `IntegerCache` 的实现: 1. **初始化**:`...

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

    通过Integer.valueOf()方法获取这些范围内的数值时,会从缓存池中直接获取或复用对象,而不是每次都创建新的对象。例如: ```java Integer x = new Integer(123); // 创建新对象 Integer y = new Integer(123); // ...

Global site tag (gtag.js) - Google Analytics