`
guzizai2007
  • 浏览: 359598 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Integer自动装箱问题

    博客分类:
  • Java
 
阅读更多

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 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java中的自动装箱与拆箱Java开发Java经验技巧共6

    虽然自动装箱和拆箱简化了代码,但过度依赖可能导致性能问题。因为每次装箱和拆箱都会创建或销毁对象,这在处理大量数据时可能会增加内存开销和CPU消耗。此外,如果对象是null,进行拆箱操作会导致`...

    java陷阱之自动装箱共2页.pdf.zip

    本篇文章将深入探讨Java中的自动装箱,并分析可能遇到的问题。 自动装箱是指Java编译器自动将基本数据类型(如int、char、boolean等)转换为它们对应的包装类(如Integer、Character、Boolean等)的过程。反之,...

    Java中的自动装箱和拆箱是什么?它们有什么作用?(java面试题附答案).txt

    // 自动装箱,相当于Integer a = Integer.valueOf(10); int b = a; // 自动拆箱,相当于int b = a.intValue(); ``` #### 四、自动装箱与拆箱的注意事项 尽管自动装箱和拆箱带来了诸多便利,但在实际开发中也需要...

    Java中的自动装箱与拆箱_.docx

    此外,过度使用自动装箱和拆箱可能导致性能问题,因为每次装箱和拆箱都会创建新的对象,尤其是在循环中。因此,对于性能敏感的代码,应该尽量避免频繁的装箱和拆箱操作。 总结来说,自动装箱和拆箱是Java为了提高...

    关于Java自动装箱(autoboxing)的一些意想不到的结果

    3. 自动装箱对象的垃圾收集问题:如果使用自动装箱后的对象作为Map的键,这些对象可能不会被垃圾收集器回收。这是因为自动装箱后的对象在一定范围内是被缓存的,所以即使你认为这些对象应该不再被使用了,它们仍然...

    java自动拆装箱及享元设计模式

    ` 在这里,a被转换成Integer对象b,这就是自动装箱。 2. 自动拆箱:相反,当我们调用包装类对象的方法或将其赋值给基本数据类型时,Java会自动进行拆箱操作。如`int c = b;` 这里,Integer对象b被转换回int类型c,...

    Kotlin基本类型自动装箱出现问题解决办法

    Kotlin 基本类型自动装箱出现问题解决办法 Kotlin 是一种静态类型的编程语言,它在编译时会对基本类型进行自动装箱操作。自动装箱是指将基本类型转换为其对应的对象类型,以便在对象引用中使用。然而,在某些情况下...

    Java中的自动装箱与拆箱:深入理解基本数据类型与对象的转换

    // 将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编译器在某些情况下会将基本类型自动转换为对象类型的过程。在这个过程中,Kotlin编译器会根据不同的情况选择不同的...

    浅谈Java自动装箱与拆箱及其陷阱

    Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...

    《深入理解java虚拟机》自动装箱拆箱实例.doc

    使用 `+` 运算符时会触发自动拆箱,将 `a` 和 `b` 转换为基本数据类型 `int` 进行加法运算,然后结果再自动装箱为 `Integer` 类型。最终,`c` 和 `a+b` 的值都是3,且 `Integer` 类重写了 `equals` 方法,使其比较的...

    kentanvictor#STUDY#java1.5新特性之自动装箱与自动拆箱1

    //这里就是自动的装箱,将3转换成Integer类型并放到集合中自动拆箱包装类自动转为基本类型 Integer &gt;&gt; int面试常见题目:自动拆箱与自动装箱的问

    java编程中自动拆箱与自动装箱详解

    在自动装箱和自动拆箱过程中,IntegerCache机制可以减少对象创建的次数,提高程序性能。 7. 小结 自动装箱和自动拆箱是Java编程中重要的数据类型转换机制,可以简化代码,提高开发效率。但是,需要注意自动装箱和...

    java自动装箱拆箱深入剖析

    需要注意的是,虽然自动装箱和拆箱带来了便利,但也可能隐藏潜在的性能问题。因为每次创建新的对象都需要额外的内存开销,特别是在循环或大量操作中频繁进行装箱和拆箱时。因此,在性能敏感的代码中,应当谨慎使用...

    Java中自动装箱、拆箱引起的耗时详解

    但是,这个过程会引起一些耗时问题,本文将详细介绍Java中自动装箱和拆箱引起的耗时问题。 自动装箱和拆箱的定义 自动装箱就是Java自动将原始(基本)类型转换成对应的封装器(对象)类型的过程,如将int变量转换...

    JAVA装箱拆箱(很详细、易于理解)

    此外,对于较大的整数,例如超过-128到127范围的`Integer`对象,使用自动装箱创建的新对象每次都会指向不同的内存地址,因此即使数值相等,对象引用也会不同。这一点在处理大量自动装箱的整数时尤其需要注意,因为它...

    详解Java 自动装箱与拆箱的实现原理

    自动装箱是指Java将原始类型值转换成对应的对象的过程,如将int类型的变量转换成Integer对象。反之,将对象转换成原始类型值的过程称为拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和...

    Tedu正则表达式与Object与自动装箱与拆箱

    ### Tedu正则表达式与Object与自动装箱与拆箱 #### 正则表达式 正则表达式是一种强大的文本处理工具,可以用来检查一个序列(如字符串)是否符合特定的模式。在编程中,它被广泛应用于数据验证、搜索和替换等方面...

    自动化集装箱码头岸桥-堆场作业均衡调度研究_丁一1

    2. 混合整数规划模型(Mixed Integer Programming Model):混合整数规划模型是解决岸桥调度问题的数学模型,该模型考虑了岸桥冲突、安全距离和堆场箱区作业量均衡因素,以最小化船舶装卸完工时间及均衡各时段内堆场...

    Java中的自动装箱与拆箱

    自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。  如果你在Java...

Global site tag (gtag.js) - Google Analytics