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

© 史卜坤 中级黑马   /  2012-7-11 10:28  /  1676 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package execisetest;
import java.util.*;
public class CollectionTest {
        public static void main(String [] args){
                ArrayList al=new ArrayList();
               
                al.add(3);
                al.add("jacaa");               
                sop(al);               
        }
        public static void sop(Object obj){
                System.out.println(obj);
        }
}
al.add(3);
这里的3是不是装箱成了Integer对象?如果我想输出存储3的内存地址,可以吗?

4 个回复

倒序浏览
import java.util.*;
public class CollectionTest {
        public static void main(String [] args){
                ArrayList al=new ArrayList();
               
                al.add(3);
               
                al.add("jacaa");               
                //sop(al);  
                for(Object obj:al){
                          System.out.println(obj);
                          if(obj.equals((Integer)3))
                          System.out.println(obj.hashCode());//我不太确定,仅供参考吧
                }
        }
   
        public static void sop(Object obj){
                System.out.println(obj);
                //System.out.println(obj.hashCode());//这样可以打印出集合的地址
        }
}
回复 使用道具 举报
本帖最后由 黄丽慧 于 2012-7-11 12:11 编辑

1楼的 for方法里面的obj.equals((Integer)3)这个不对吧,我一开始也是跟一楼一样,用obj.hashCode()来打印集合的地址值,运行结果为603574a(十六进制的)。后来一看楼主想要打印的是元素3的内存地址值。于是我就把代码改成下面这样的了:
import java.util.*;
public class CollectionTest {
        public static void main(String [] args){
                ArrayList al=new ArrayList();
               
                al.add(3);
                al.add("jacaa");               
                sop(al);
                Iterator i=al.iterator();
                if(i.hasNext())
                {
                        Object o=i.next();
                        if(o instanceof Integer)
                        {
                                Integer in=(Integer)o;
                                if(in==3)
                                {
                                        System.out.println(in+"的内存地址为" + Integer.toHexString(in.hashCode())
);
                                }
                        }
                }
               
        }
        public static void sop(Object obj){
                System.out.println(obj);
        }
}

但是运行的结果是:
3的内存地址为3
我一下子就蒙了,上网查了很久也没有正解,我就想是不是因为JVM在给al对象分配内存空间时,分配的是一片连续的内存地址,各个元素按照顺序存放进去的。另外hashCode()只能取单个对象的内存,并不能取元素的内存地址。
期待高手正解。。。。。。。
回复 使用道具 举报
import java.util.*;
class CollectionTest {
        public static void main(String [] args){
                ArrayList al=new ArrayList();
               
                al.add(3);
               
                al.add("jacaa");
        al.add("3");
                al.add(3.0);
                sop(al.get(0).hashCode());  //3              
                sop(al.get(1).hashCode()); //100881196
                sop(al.get(2).hashCode()); //51   
                sop(al.get(3).hashCode());//1074266112
                sop(al.hashCode());               
        }
        public static void sop(Object obj){
                System.out.println(obj);
        }
}
所以猜想整数的哈希码就是它本身
回复 使用道具 举报
package execisetest;

import java.util.*;

public class CollectionTest {
        public static void main(String[] args) {
//        因为没有定制泛型所以类型还不确定;泛型是jdk1.5以后的新特性;
                ArrayList al = new ArrayList();
//这个地方使用了jdk1.5以后的新特性;自动拆装箱;这个地方使用了自动装箱;把int类型装成了integer类型;
                al.add(3);
                al.add("jacaa");
//                 sop(al);
                for (Object o : al) {
//                比较对象是否相同;
                        if (o instanceof Integer) {
                                Integer in = (Integer) o;
                                if (in == 3) {
                                        System.out.println(Integer.toHexString(in).hashCode());
                                }
                        }
                }
        }

        public static void sop(Object obj) {
                System.out.println(obj);
        }
}
是使用了自动装箱,为integer类型;可以得出3的地址值为51我也不知道是不是对的;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马