面试题答案
一键面试- Integer类缓存机制涉及的整数范围:
- 在Java中,Integer类缓存机制所涉及的整数范围是 -128 到 127。这是因为在这个范围内的整数在实际应用中使用频率较高,通过缓存这些值,可以提高性能和节省内存。
- 超出范围时
Integer.valueOf(int)
方法和new Integer(int)
创建对象的不同:Integer.valueOf(int)
方法:当超出 -128 到 127 这个范围时,Integer.valueOf(int)
方法仍然会创建新的Integer
对象,但它会根据传入的值直接在堆内存中创建一个新的Integer
实例。例如Integer i1 = Integer.valueOf(128);
,这里会在堆上创建一个新的Integer
对象来表示128。new Integer(int)
:使用new Integer(int)
无论传入的值是否在缓存范围内,都会在堆内存中创建一个全新的Integer
对象。例如Integer i2 = new Integer(128);
同样会在堆上创建一个新的Integer
对象。但是使用new
关键字创建对象会比Integer.valueOf(int)
方法创建对象多一些额外的开销,因为new
关键字会触发对象的初始化等操作。并且,使用new
创建的对象,即使值相同,在进行==
比较时也会返回false
,而Integer.valueOf(int)
在缓存范围内创建的对象,==
比较会返回true
(因为是同一个缓存对象),超出范围时和new
创建对象一样,==
比较返回false
,因为它们是不同的堆对象。