为了节省内存,对于下列包装对象的两个实例,当它们的基本值相同时,他们总是==:
Boolean
Byte
Character, \u0000 - \u007f(7f是十进制的127)
Integer, -128 — 127
* Description: Integer.valueOf()方法基于减少对象创建次数和节省内*存的考虑,缓存了[-128,127]之间的数字。
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author yehaicao
* @version 1.0
*/
public class IntegerCacheTest
{
public static void main(String[] args)
{
//生成新的Integer对象
Integer in1 = new Integer(6);
//生成新的Integer对象,并缓存该对象
Integer in2 = Integer.valueOf(6);
//直接从缓存中取出Ineger对象
Integer in3 = Integer.valueOf(6);
//输出false
System.out.println(in1 == in2);
//输出true
System.out.println(in2 == in3);
//由于Integer只缓存-128~127之间的值,
//因此200对应的Integer对象没有被缓存。
Integer in4 = Integer.valueOf(200);
Integer in5 = Integer.valueOf(200);
System.out.println(in4 == in5); //输出false
}
}
JDK6 API:
valueOf
public static Integer valueOf(int i)返回一个表示指定的 int 值的 Integer 实例。
如果不需要新的 Integer 实例,则通常应优先使用该方法,而不是构造方法 Integer(int),**
因为该方法有可能通过缓存经常请求的值而显著提高空间和时间性能。
**
参数:
i - 一个 int 值。
返回:
表示 i 的 Integer 实例。
从以下版本开始:
1.5