`
guzizai2007
  • 浏览: 355481 次
  • 性别: 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 

 

分享到:
评论
发表评论

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

相关推荐

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

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

    Java中的自动装箱与拆箱

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

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

    在自动装箱中,我们将基本类型 int 赋值给 Integer 对象,而在自动拆箱中,我们将 Double 对象赋值给基本类型 double。这样,我们可以直接使用基本类型和包装类型之间的赋值操作,而不需要显式地进行类型转换。 ...

    Java自动装箱性能

    有了自动装箱,你可以写如下的代码  Character boxed = 'a';  char unboxed = boxed;  编译器自动将它转换为  Character boxed = Character.valueOf('a');  char unboxed = boxed.charValue();  然而,...

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    自动装箱是指 Java 编译器在编译时将基本类型 int 转换为 Integer 对象的过程。 使用 "==" 运算符比较 Integer 对象 在 Java 中,"==" 运算符用于比较两个对象的引用是否相同,而不是比较对象的实际值。因此,当...

    字节码解释Java自动装箱和拆箱的操作

     不过这些问题可以通过看字节码来解决。  代码很简单: Integer x = 5; x++;  且看字节码:  第一个红框的内容是Integer x = 5;的操作,实际上调用了Integer的valueOf方法。  第二个则对应与x++,先...

    记录Integer 自动装包拆包代码解析

    记录Integer 自动装包拆包代码解析Integer 核心代码IntegerCache 类valueOf方法 Integer 核心代码 1、自动装拆箱 编译前 public static void main(String[]args){ Integer integer=1; //装箱 int i=integer; //...

    java包装类练习.doc

    Java 包装类型的自动装箱拆箱机制是指在(assign)操作时,Java 会自动地将基本类型转换为包装类型,或者将包装类型转换为基本类型。例如,Integer i = 100;这里的 i 就是自动装箱的结果。 5. Java 语句 Integer i=1;...

    深入剖析Java中的装箱和拆箱

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,我们来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  以下是本文的目录大纲:...

    Java int与integer的区别

    int与integer的区别从大的方面来说是基本数据类型与其包装类的区别:  int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个...但由于有了自动装箱和拆箱,  使得对Integer类也可使用:Integer i= 1

    Java后端开发面试常见问题

    Java后端开发面试常见问题 Java语言有哪些特点: 1. 简单易学、有丰富的类库 ...而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:Integer integer = 10;

    Java包装类详解.pptx.pptx

    包装类的定义 包装类是Java提供的一种特殊类,它...包装类提供了自动装箱和拆箱的功能,可以将基本数据类型自动转换为对应的包装类对象,也可以将包装类对象自动转换为基本数据类型。这大大提高了代码的简洁性和效率。

    第7讲 int和Integer有什么区别1

    1. 理解自动装箱、拆箱 2. 源码分析 3. 原始类型线程安全

    Java面试八股文10万字总结.pdf

    自动装箱就是自动将基本数据类型转换为包装器类型(int--&gt;Integer),调用方法是 Integer 的 valueOf(int) 方法。自动拆箱就是自动将包装器类型转换为基本数据类型(Integer--&gt;int),调用方法是 Integer 的 int...

    软件工程师 程序员10万字大厂应聘面试总结java面试题和答案.pdf

    Java自动装箱是自动将基本数据类型转换为包装器类型(int--&gt;Integer),调用方法是Integer的valueOf(int)方法。Java自动拆箱是自动将包装器类型转换为基本数据类型(Integer--&gt;int),调用方法是Integer的intValue()...

    Java经典面试题.pdf

    1.什么是Java的自动装箱和拆箱? 自动装箱是指将基本数据类型转换为对应的包装类对象,以便于在需要使用对象的地方进行操作。例如,将int类型的数据自动转换为Integer对象。 自动拆箱是指将包装类对象转换为对应的...

    10万字总结java面试题和答案.pdf

    自动装箱是指将基本数据类型转换为包装器类型,例如 int 转换为 Integer。自动拆箱是指将包装器类型转换为基本数据类型,例如 Integer 转换为 int。 Java 语言提供了自动装箱和拆箱的机制,方便开发者使用基本数据...

    阿里2017年Java学科面试测试题

    但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。...

    cai-yuxiang#-#基本数据类型以及包装类1

    1.实现int和integer之间的转换 2.Integer的常用方法 3.自动装箱和自动拆箱 4.数值的比较

Global site tag (gtag.js) - Google Analytics