A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊占江 中级黑马   /  2012-8-23 01:06  /  1360 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class AutoBox {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Integer iObj=3;
  System.out.println(iObj+12);
  String s1=new String("abc");
  String s2=new String("abc");
  Integer i1=137;
  Integer i2=137;
  System.out.println(i1==12);
  Integer i3=Integer.valueOf(3);
  Integer i4=Integer.valueOf(3);
  System.out.println(i3==i4);
}
}
我现在想要的是如何让Integer i1=137;
  Integer i2=137;
  System.out.println(i1==12);不为false

3 个回复

倒序浏览
public static void main(String args[]){
                Integer a = new Integer(666);
                //a++;
                a = a+1;
                System.out.println(a);
                change(a);
                System.out.println(a);
                }

                public static void change(Integer a){
                a = 10;
                }

点评

为什么你跟楼上IP一样呢?  发表于 2012-8-23 08:20
回复 使用道具 举报
先看一下Integer的原码
public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
}
从jdk1.5开始,有“自动装箱”这么一个机制,在byte-128到127范围内(ps整型的八位二进制的表示的范围为-128到127),如果存在了一个值,再创建相同值的时候就不会重新创建,而是引用原来那个,用==来比较时,是同一个对象
但是超过byte范围还是会新建的对象new Integer(),那么用==来比较时,地址是不等的

Integer i1=new Integer(128);
int i2=128;
//经历拆箱过程将i1对象变为int i1=128;所以为true
System.out.println("---new Integer与int---"+(i1==i2));
Integer i3=new Integer(128);
//两个都是new。。两个对象间的比较,比较的是地址,所以为false
System.out.println("---new Integer与new Integer---"+(i1==(i3)));
Integer i4=128;
Integer i44=127;
//不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
System.out.println("---new Integer与Integer---"+(i3==i4));
Integer i5=128;
Integer i55=127;
//Integer与Integer间的比较,自动装箱过程,超过范围则创建新对象
System.out.println("---Integer为128与Integer为128---"+(i4==i5));
System.out.println("---Integer为127与Integer为127---"+(i44==i55));

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 王海亮 于 2012-8-23 12:21 编辑
王海亮 发表于 2012-8-23 01:07
public static void main(String args[]){
                Integer a = new Integer(666);
                //a++;

都在八维住用   同一个条线
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马