您的位置:首页 > 其它

Integer自动拆箱、自动装箱

2015-02-13 10:34 633 查看
package com.tmt.test_code;

public class ZhuangChaiXiiangTest {

  public static void main(String[] args) {

   Integer i1=new Integer(128);

   int i2=128;

   Integer i3=new Integer(128);

   Integer i4=128;

   Integer i44=128;

   Integer i5=127;

   Integer i55=127;

   Long i6 = 127L;

   Long i66 = 127L;

   Long i7 = 128L;

   Long i77 = 128L;

   Integer a = 1;

   Integer b = 2;

   Long c = 3L;

   System.out.println("---new Integer(128)  ==  int 128 ---"+(i1==i2)); 

   System.out.println("---new Integer(128) == new Integer(128)---"+(i1==i3)); 

   System.out.println("---Integer 127  == Integer 127---"+(i5==i55));

   System.out.println("---Integer 128  == Integer 128---"+(i4==i44)); 

   System.out.println("---Long 127L == Long 127L--"+(i6==i66));

   System.out.println("---Long 128L == Long 128L--"+(i7==i77));

   System.out.println("3L.equals(integer 1 + integer 2)--"+c.equals(a+b));

  System.out.println("3L == (integer 1 + integer 2)--"+(c == (a+b))); 

  }

}

这个的运算结果是什么呢?

---new Integer(128)  ==  int 128 ---true

---new Integer(128) == new Integer(128)---false

---Integer 127  == Integer 127---true

---Integer 128  == Integer 128---false

---Long 127L == Long 127L--true

---Long 128L == Long 128L--false

3L.equals(integer 1 + integer 2)--false

3L == (integer 1 + integer 2)--true

大家也许要问原因了:

---new Integer(128)  ==  int 128 ---true

基本数据类型和对象间的“==”,对象会自动拆箱为基本数据类型再比较,比较的就是里面的值而不是地址


---new Integer(128) == new Integer(128)---false

对象间的“==”是比较两者在内存中的地址

 

 

---Integer 127  == Integer 127---true

---Integer 128  == Integer 128---false

---Long 127L == Long 127L--true

---Long 128L == Long 128L--false

Integer与Integer间的"=="比较,从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,但是超过byte范围还是会新建的对象

3L.equals(integer 1 + integer 2)--false

equals方法不处理类型间的转换

3L == (integer 1 + integer 2)--true

包装类的“==”运算在遇到算术运算的情况下会自动拆箱
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 对象