首页 > 代码库 > JAVA随笔—JDK1.5的自动装箱与拆箱
JAVA随笔—JDK1.5的自动装箱与拆箱
今天偶然间发现项目里Integer类型的变量用“==”进行比较的,但是却一直没出现问题。所以就上网查了查,发现这里面涉及到JDK1.5的新特性。
1.Java中的数据类型,可分为两类:
a.基本数据类型,也称原始数据类型。short,char,int,long,float,double,boolean,byte
用“==”进行比较。
b.引用数据类型(类)
比较引用类型变量值的时候,需要调用equals()方法,当他们用“==”进行比较的时候,比较的是他们在内存中的存放地址。
2.先运行这段代码
1 public class TestClass { 2 public static void main(String[] args) { 3 Integer a=10; 4 Integer b=10; 5 Integer c=200; 6 Integer d=200; 7 System.out.println("a==b:"+(a==b)); 8 System.out.println("c==d:"+(c==d)); 9 }10 }
结果为:
1 a==b:true2 c==d:false
结果分析:为什么两次的结果不一样呢?后来去网上查阅了一下资料,Integer a=10,实际上执行了Integer a=Integer.valueOf(10)装箱操作,而在自动装箱时对于从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用(这里面涉及到一种设计模式,叫享元模式),也就是说,其实此时a和b在内存中的地址是一样的,所以结果为true,而c和d的值大于127,他们在内存中的地址不会被共享,结果false.
3.再来看看自动拆箱,其实自动拆箱很简单,我们平时用的比较多,只是概念不清晰。
1 public class TestClass { 2 public static void main(String[] args) {3 Integer a=new Integer(200);4 int b=200;5 System.out.println("a==b:"+(a==b));6 }7 }
当Integer类型数据作运算的时候系统就会自动执行了拆箱过程a.intValue(),再进行运算。
注:自动拆箱和装箱是JDK1.5版本新加的特性,所以之前的版本并不支持。
JAVA随笔—JDK1.5的自动装箱与拆箱
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。