1、测试类:
public class IntegerTest {
public static void main(String[] args) {
Integer m = 200;
Integer n = 200;
System.out.println(m == n);
Integer i = 100;
Integer j = 100;
System.out.println(i == j);
}
}
打印信息:
--------------------------------------------------------------------------------
false
true
--------------------------------------------------------------------------------
2、反编译该类:
public class Integertest
{
public static void main(String[] paramArrayOfString)
{
Integer localInteger1 = Integer.valueOf(200);
Integer localInteger2 = Integer.valueOf(200);
System.out.println(localInteger1 == localInteger2);
Integer localInteger3 = Integer.valueOf(100);
Integer localInteger4 = Integer.valueOf(100);
System.out.println(localInteger3 == localInteger4);
}
}
3、查看Integer.valueOf()源码:
public static Integer valueOf(int i) {
//当值大于等于-128 小于等于IntegerCache.high值时,直接在cache数组中取值 否则new一个
if (i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
private static class IntegerCache {
//缓存数上限
static final int high;
//存放缓存数的数组
static final Integer cache[];
static {
//缓存数 下限
final int low = -128;
//默认缓存数 上限
int h = 127;
//integerCacheHighPropValue值在jvm启动初始化是得到 可通过-XX:AutoBoxCacheMax=值 配置该值
if (integerCacheHighPropValue != null) {
int i = Long.decode(integerCacheHighPropValue).intValue();
i = Math.max(i, 127);
h = Math.min(i, Integer.MAX_VALUE - -low);
}
high = h;
//新建一个大小为(high-low)+1的缓存数组cache
cache = new Integer[(high - low) + 1];
int j = low;
for (int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
}
private IntegerCache() {
}
}
4、总结:
1)、Integer自动装箱是通过Integer.valueOf(int i)来实现的
2)、如果虚拟机AutoBoxCacheMax没有配置,当i值<=127且>=-128时,Integer.valueOf()会直接去缓存数组中取出相应的Integer对象,其他值均使用构造方法来生成Integer对象。
3)、所以最后的打印结果是 false、true
分享到:
相关推荐
虽然自动装箱和拆箱简化了代码,但过度依赖可能导致性能问题。因为每次装箱和拆箱都会创建或销毁对象,这在处理大量数据时可能会增加内存开销和CPU消耗。此外,如果对象是null,进行拆箱操作会导致`...
本篇文章将深入探讨Java中的自动装箱,并分析可能遇到的问题。 自动装箱是指Java编译器自动将基本数据类型(如int、char、boolean等)转换为它们对应的包装类(如Integer、Character、Boolean等)的过程。反之,...
// 自动装箱,相当于Integer a = Integer.valueOf(10); int b = a; // 自动拆箱,相当于int b = a.intValue(); ``` #### 四、自动装箱与拆箱的注意事项 尽管自动装箱和拆箱带来了诸多便利,但在实际开发中也需要...
此外,过度使用自动装箱和拆箱可能导致性能问题,因为每次装箱和拆箱都会创建新的对象,尤其是在循环中。因此,对于性能敏感的代码,应该尽量避免频繁的装箱和拆箱操作。 总结来说,自动装箱和拆箱是Java为了提高...
3. 自动装箱对象的垃圾收集问题:如果使用自动装箱后的对象作为Map的键,这些对象可能不会被垃圾收集器回收。这是因为自动装箱后的对象在一定范围内是被缓存的,所以即使你认为这些对象应该不再被使用了,它们仍然...
` 在这里,a被转换成Integer对象b,这就是自动装箱。 2. 自动拆箱:相反,当我们调用包装类对象的方法或将其赋值给基本数据类型时,Java会自动进行拆箱操作。如`int c = b;` 这里,Integer对象b被转换回int类型c,...
Kotlin 基本类型自动装箱出现问题解决办法 Kotlin 是一种静态类型的编程语言,它在编译时会对基本类型进行自动装箱操作。自动装箱是指将基本类型转换为其对应的对象类型,以便在对象引用中使用。然而,在某些情况下...
// 将Integer自动拆箱为int Double pi = 3.14; double p = pi; // 将Double自动拆箱为double Character ch = 'A'; char c = ch; // 将Character自动拆箱为char Boolean flag = true; boolean b = flag; // 将...
Kotlin基本类型自动装箱一点问题剖析 Kotlin基本类型自动装箱是一个重要的概念,它指的是Kotlin编译器在某些情况下会将基本类型自动转换为对象类型的过程。在这个过程中,Kotlin编译器会根据不同的情况选择不同的...
Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...
使用 `+` 运算符时会触发自动拆箱,将 `a` 和 `b` 转换为基本数据类型 `int` 进行加法运算,然后结果再自动装箱为 `Integer` 类型。最终,`c` 和 `a+b` 的值都是3,且 `Integer` 类重写了 `equals` 方法,使其比较的...
//这里就是自动的装箱,将3转换成Integer类型并放到集合中自动拆箱包装类自动转为基本类型 Integer >> int面试常见题目:自动拆箱与自动装箱的问
在自动装箱和自动拆箱过程中,IntegerCache机制可以减少对象创建的次数,提高程序性能。 7. 小结 自动装箱和自动拆箱是Java编程中重要的数据类型转换机制,可以简化代码,提高开发效率。但是,需要注意自动装箱和...
需要注意的是,虽然自动装箱和拆箱带来了便利,但也可能隐藏潜在的性能问题。因为每次创建新的对象都需要额外的内存开销,特别是在循环或大量操作中频繁进行装箱和拆箱时。因此,在性能敏感的代码中,应当谨慎使用...
但是,这个过程会引起一些耗时问题,本文将详细介绍Java中自动装箱和拆箱引起的耗时问题。 自动装箱和拆箱的定义 自动装箱就是Java自动将原始(基本)类型转换成对应的封装器(对象)类型的过程,如将int变量转换...
此外,对于较大的整数,例如超过-128到127范围的`Integer`对象,使用自动装箱创建的新对象每次都会指向不同的内存地址,因此即使数值相等,对象引用也会不同。这一点在处理大量自动装箱的整数时尤其需要注意,因为它...
自动装箱是指Java将原始类型值转换成对应的对象的过程,如将int类型的变量转换成Integer对象。反之,将对象转换成原始类型值的过程称为拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和...
### Tedu正则表达式与Object与自动装箱与拆箱 #### 正则表达式 正则表达式是一种强大的文本处理工具,可以用来检查一个序列(如字符串)是否符合特定的模式。在编程中,它被广泛应用于数据验证、搜索和替换等方面...
2. 混合整数规划模型(Mixed Integer Programming Model):混合整数规划模型是解决岸桥调度问题的数学模型,该模型考虑了岸桥冲突、安全距离和堆场箱区作业量均衡因素,以最小化船舶装卸完工时间及均衡各时段内堆场...
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。 如果你在Java...