(转)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
分享到:
相关推荐
从源码中我们可以看到,Integer.ValueOf()方法首先判断传入的整数值是否在-128到127之间,如果在这个范围内,就从IntegerCache中取出对应的缓存对象返回,否则就创建一个新的Integer对象。 那么,IntegerCache是...
它和Integer.parseInt()方法的区别在于,Integer.valueOf()方法会根据int范围从[-127,127]的内部缓存中取值,这样可以提高性能。同时,Integer.valueOf()方法也会抛出NumberFormatException异常,如果字符串是null...
Integer.valueOf() 方法有一个缓存机制,对于 -128 到 127 之间的整型数字,会从缓存中获取,而不是新建对象。这个缓存机制可以提高性能,但也需要注意其使用时的限制。 例如,在比较一个字符串数字是否与某个整型...
总的来说,理解`Integer.valueOf()`的工作原理和`Integer`对象的缓存机制,是掌握Java中高级特性和优化性能的关键。在编写代码时,尤其是涉及到大量对象创建和比较时,了解这些细节可以帮助写出更高效、更符合预期的...
- **`Integer.valueOf().intValue()`**:先创建一个`Integer`对象,再从中获取`int`值。 - **性能方面**: - **`Integer.parseInt()`**:由于不涉及对象创建,性能更高。 - **`Integer.valueOf().intValue()`**:...
例如,`Integer.valueOf(int i)`会在-128到127的范围内直接返回缓存的`Integer`对象,以避免重复创建对象。 在编程实践中,理解`valueOf`方法不仅有助于写出更高效、简洁的代码,还能帮助我们在处理数据类型转换时...
另一方面,对于-128到127之间的Integer对象,Java提供了缓存机制,因此`Integer.valueOf(-128) == Integer.valueOf(-128)`为真。对于大于127的值,如`Integer.valueOf(128)`,缓存行为未定义,因此比较结果不确定。...
在Java编程语言中,将`Integer`对象转换为基本数据类型`int`有两种常见的方法:`Integer.parseInt()`和`Integer.valueOf()`。理解这两种方法的区别和应用场景对于编写高效且正确的Java代码至关重要。 首先,我们来...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) ... * Integer.valueOf() 、Long.valueOf() * 当数字范围超出, short 1字节 (-128 、+127),生成模式为 new 新对象
- `valueOf` 方法:`Integer num = Integer.valueOf(100);`,推荐使用此方法,因为它可以复用已有的对象,减少内存开销。 - 拆箱(unboxing):将包装类对象转换回基本数据类型。 - 直接赋值:`int i = num;` - ...
当使用valueOf方法创建Integer对象时,如果值在缓存范围内,会直接从缓存中获取,否则新建一个对象。例如: ```java Integer x = new Integer(123); // 新建对象 Integer y = new Integer(123); // 新建对象,即使...
查看`Integer`的源码可以帮助我们更深入地理解其内部机制,比如`Integer.valueOf()`方法如何实现值缓存,以及`Integer`对象的比较操作是如何进行的。 6. **扩展讨论**: - 自动装箱/拆箱发生的时间:这些操作发生...
Integer.valueOf方法内部有缓存机制,当int值在一定范围内时,会直接返回缓存的对象,以减少对象创建的开销。这里的缓存范围是由IntegerCache的low和high参数决定的,通常情况下,low为-128,high为127,这是因为-...
`Integer.valueOf(int i)`方法的源码中有一个对`IntegerCache`的引用,这是一个静态内部类,它维护了一个缓存数组,用于存储这个范围内的Integer对象。这样,当多次调用`valueOf`方法并传入相同的值时,就可以避免...
10. **Integer.valueOf(int i)**: 这个静态方法根据`int`值`i`返回一个`Integer`对象。如果`i`在缓存范围(-128到127)内,它将从`IntegerCache`获取对象,否则创建新的`Integer`实例。 11. **XXXValue**: 这可能是...
两者的区别在于 `Integer.valueOf()` 可以用于缓存小范围(-128 到 127)内的整数值,提高性能。 ```java String str = "456"; int num = Integer.valueOf(str); ``` 三、`TextUtils.parseInt()` 如果你在使用...
`时,编译器实际上会自动转换为`Integer i = Integer.valueOf(20);`这一过程称为装箱。同样,当我们使用`int j = i;`时,编译器会处理成`int j = i.intValue();`这就是拆箱。这个机制使得整数对象的使用更加便捷。 ...
Integer.valueOf()方法会将int类型的值装箱到Integer对象中,并且在-128到127之间的值会被缓存,以提高性能。 知识点3:Integer比较 在比较两个Integer对象时,我们应该使用equals()方法,而不是==操作符,这是...
当 `Integer.valueOf()` 被调用时,如果传入的整数值在这个范围内,那么它会直接从缓存中获取已存在的对象,否则会新建一个 `Integer` 对象。 让我们详细分析一下 `IntegerCache` 的实现: 1. **初始化**:`...
通过Integer.valueOf()方法获取这些范围内的数值时,会从缓存池中直接获取或复用对象,而不是每次都创建新的对象。例如: ```java Integer x = new Integer(123); // 创建新对象 Integer y = new Integer(123); // ...