Java包装类的自动装箱和拆箱

在讨论区中看到这样一个问题:
java

public static void main(String[] args) {
		Integer i  = 200;
		Integer j = 200;
		System.out.println(i == j); //false
		System.out.println(200 == i); //true
	}

原问题连接:http://www.oschina.net/question/727875_148095.net

第一个输出的结果为false,而第二个输出的结果为true。code

注意 i 和 j 都不是基本的数据类型,而是类Integer的对象,这其中便涉及到java的自动装箱和拆箱的机制。htm

JDK 5.0以前都是手动进行包装类的装箱和拆箱,以下:对象

int i = 1;//基本数据类型int
Integer j = new Integer(i);//手动装箱
int k = j.intValue();//手动拆箱

5.0以后能够自动进行装箱和拆箱的操做,以下:blog

Integer i = 1;//自动装箱
int j = i;//自动拆箱

Integer i = 10;
System.out.println(i--);//10,计算时的自动拆箱

Integer a = 95;
Integer b = 95;
System.out.println("a==b:" + (a==b));//a==b:true

可是,以下程序输出的结果并非同样的:内存

Integer a = 295;
Integer b = 295;
System.out.println("a==b:" + (a==b));//a==b:false

这是由于在自动装箱的时候,-128到127的值被装箱成Integer对象存在内存中是能够被重用的,所以第一个比较结果会输出true,而超出以上范围的数值装箱后的对象并不会被重用,那么就至关于new两个Integer对象,比较的结果天然是false。get

在java中,每种基本数据类型都有对应的包装类,以下:it

INDEX 基本数据类型 包装类
1 int Integer
2 char Character
3 float Float
4 double Double
5 byte Byte
6 short Short
7 long Long
8 boolean Boolean

参考连接:http://jzinfo.iteye.com/blog/450590io

                http://www.jb51.net/article/31934.htm

相关文章
相关标签/搜索