Java中Integer类的自动装箱和自动拆箱
来源:互联网 发布:避孕套品牌 知乎 编辑:程序博客网 时间:2024/06/12 01:47
所谓自动装箱,就是把基本数据类型用他们对应的引用类型包装起来,使他们可以具有对象的特质。例如我们可以把int类型包装成Integer类型的,把double类型的包装成Double类型的。
所谓拆箱,就是进行与自动装箱相反的操作。
自动装箱的过程:当需要一种类型的对象时,这种基本数据类型就自动封装到与它对应的包装类中。
自动拆箱的过程:当需要一个数值时,被装箱的对象中的值就会被自动提取出来,没有必要再去调用intValue()和doubleValue()等方法。
public static void main(String[] args) {Integer a=100;Integer b=100;Integer c=200;Integer d=200;System.out.println(a==b);//1System.out.println(a==100);//2System.out.println(c==d);//3System.out.println(c==200);//4}
在java中,"=="比较的是对象的引用,而不是值(value),自动装箱后a,b,c,d都是Integer类型的对象,因此"=="比较的是其引用。按照常规思维1和3应该是false,但是结果是:
true
true
false
true
2和4是因为进行了自动拆箱,比较的是基本数据类型,因此"=="比较的是其数值,结果数true。
对于结果1,虽然比较的是对象的引用,但是自动装箱时,java在编译的时候Integer a=100,被编译成Integer a=Integer.valueOf(100)。因此,关键就在于valueOf()这个方法。
再看下面的例子:
Integer aa=-128;Integer bb=-128;System.out.println(aa==bb);Integer cc=-129;Integer dd=-129;System.out.println(cc==dd);Integer ee=127;Integer ff=127;System.out.println(ee==ff);Integer gg=128;Integer hh=128;System.out.println(gg==hh);
上面代码输出的结果是:
truefalsetruefalse说明当Integer类型后面赋值范围在-128---127之间时,都会返回true,否则返回false。
总结:
事实上,java为了提高效率,IntegerCache类中有一个数组缓存了值从-128到127的Integer对象。当我们调用Integer.valueOf(int i)的时候,如果i的值是>=-128且<=127时,会直接从这个缓存中返回一个对象,否则就new一个Integer对象。
阅读全文
0 0
- Java中Integer类的自动装箱和自动拆箱
- 关于Integer自动装箱和拆箱的小知识
- Integer的自动拆箱装箱陷阱
- Integer的自动装箱与拆箱
- Integer自动装箱拆箱
- Java中基本数据类型的自动拆箱和装箱
- Java中基本数据类型的自动拆箱和装箱
- Java中基本数据类型的自动拆箱和装箱
- java中自动拆箱和装箱的小细节
- java中自动装箱和自动拆箱
- java中自动装箱和自动拆箱
- JavA的自动装箱和拆箱
- Java的自动拆箱和装箱
- java的自动装箱和拆箱
- Integer自动拆箱、自动装箱
- Integer自动装箱、自动拆箱
- java 自动装箱 和 自动拆箱
- java自动装箱和自动拆箱
- 初步理解数据库锁和事务的关系
- 你是怎样的程序员?
- myeclipse破解版使用说明
- 面试题51:数组中重复的数字
- python编码问题
- Java中Integer类的自动装箱和自动拆箱
- FastJson简单封装
- SingleR
- 观察者模式学习
- 一些PCL库学习博客或网站
- 适配器模式
- JAVA selenium驱动firefox——geckodriver篇
- 【机器学习读书笔记】Logistic回归
- JAVA集合类汇总