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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 怪盗急得 中级黑马   /  2012-9-24 23:13  /  1546 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈德基 于 2012-9-25 00:02 编辑
  1. String[] arr = {"1","2","3","4","5"};
  2.                 List list = Arrays.asList(arr);
  3.                 System.out.println(list);
  4.                
  5.                 int[] num = {1,2,3,4,5};
  6.                 list = Arrays.asList(num);
  7.                 System.out.println(list);
复制代码
为什么第二个打印出来的是哈希值?int型数组不也是对象吗?而且1.5版本之后不是有自动装拆箱功能?
这里面具体的过程是什么样的,大家多指点指点。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
int[]的确是对象,但是它里面的值不是对象,很多情况数组是不会自动装拆箱的
回复 使用道具 举报
  1. Integer[] nums ={1,2,3,4,5};
  2.                  List<Integer> li = Arrays.asList(nums);
  3.                  System.out.println(li);
复制代码
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在,所以集合中只有一个数组对象。
打印数组对象就是哈希值了。
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
用Integer数组,里面的数都将自动装箱成对象,集合中就全是对象了,就能打印数字了。
回复 使用道具 举报
package Test;

import java.util.Arrays;
import java.util.List;

public class Test_17 {
        public static void main(String args[]){
        String[] arr = {"1","2","3","4","5"};
         
    List list = Arrays.asList(arr);

    System.out.println(list);

   
    int[] num = {1,2,3,4,5};

    list = Arrays.asList(num);
           

    System.out.println(list);
  System.out.println(num);//[I@544a5ab2
}
}

//[1, 2, 3, 4, 5]
//[[I@152b6651],这不是哈希值,这是内存地址。是数组在内存中的地址
打印一个对象默认的是调用toString()方法,没有重写的情况下打印的就是对象的地址。
回复 使用道具 举报
所谓装箱是将基本数据类型变为包装类,如Integer i = new Integer(x);
拆箱是将一个包装类变为基本数据类型,如int temp = i.intValue();

你调用Arrays.asList()时就用错了,它不能接收基本数据类型,建议你先查一下API文档再写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马