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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙飞 中级黑马   /  2012-6-18 09:56  /  2406 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 feigecal 于 2012-6-18 23:31 编辑

class ShuZu
{
        public static void main(String[] args)
        {
                int [] arr= new int []{1,3,2,4,34,53,54,23,};
                System.out.println(printArr(arr));
        }
        public static void printArr(int [] arr)
        {
                for (int x=0;x<arr.length ;x++ )
                {
                        if (x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]);
                        
                }        
        }
}
中的System.out.println(printArr(arr));为什么只能写成printArr(arr);
还有就是如果改成
System.out.println(arr);为什么会输出[I@de6ced样的错误结果

12 个回复

倒序浏览
本帖最后由 唐辉辉 于 2012-6-18 10:00 编辑

System.out.println(printArr(arr))   printArr()方法没有返回值,所以不能用println()方法输出。
System.out.println(arr);  这里的arr是一个数组,至于为是什么[I@de6ced ,这个是数组在内存中的地址值,[代表这是一个数组,I代表这是int的,@后面的代码唯一地址。如果要输出数组中的内容,需要整个遍历数组取数组中的值。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
arr对应的是内存中数组存储地址的哈希值
你需要打印arr数组里面的元素的话,就应该调用printArr()方法
回复 使用道具 举报
很明显,调用printArr(arr)是因为printArr()是改java类中的一个方法,主函数中,要调用某方法,当然是先找到该类的方法,后面按传入符合该方法的参数;
printArr(int [] arr)传入的是int类型的数组,在main函数中恰好也初始化了一个int 类型的数组,所以会写成System.out.println(printArr(arr)) ;
System.out.println(arr);其实就是输出数组arr的toString()方法返回的字符串
要想输出初始化数组的元素,可以用for循环,类似于:
  1. for(int i=0;i<5;i++){
  2.   System.out.println(arr[i]);
  3. }
复制代码

点评

printArr(arr)没有返回值是不能System.out.println(printArr(arr)) ;这么输出的!  发表于 2012-6-18 13:03
回复 使用道具 举报
哥们你是调用printArr()方法呢,
你是不是想直接打印arr数组? 要是就别用个这个方法了直接用方法里的循环语句
如:
class ShuZu
{
        public static void main(String[] args)
        {
                int [] arr= new int []{1,3,2,4,34,53,54,23,};
                 for (int x=0;x<arr.length ;x++ )
                {
                        if (x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]);
                        
                }        
   }

我猜的你应该是想直接打印
回复 使用道具 举报
建议你仔细看看视频,里面讲解的比较清楚
回复 使用道具 举报
刘笑 中级黑马 2012-6-18 10:25:44
7#
建议你仔细看看视频,里面讲解的比较清楚
回复 使用道具 举报
李建锋 黑马帝 2012-6-18 10:27:26
8#
本帖最后由 李建锋 于 2012-6-18 10:29 编辑

class ShuZu
{
        public static void main(String[] args)
        {
                int [] arr= new int []{1,3,2,4,34,53,54,23,};
                System.out.println(printArr(arr));
        }
        public static void printArr(int [] arr)
        {
                for (int x=0;x<arr.length ;x++ )
                {
                        if (x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]);
                        
                }        
        }
}
中的System.out.println(printArr(arr)),的意思为打印printArr的哈希值,而printArr的意思为调用此方法,不知您是否明白?

回复 使用道具 举报
首先,主方法中,调用了printArr(arr);
该方法的结果是 System.out.print(arr[x]+",");
  或 System.out.println(arr[x]);
而你又在主方法中使用了 System.out.println(printArr(arr));就等于 System.out.println(System.out.print(arr[x]+","));或System.out.print(System.out.println(arr[x]));
这样是错误的!!

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
System.out.println(arr)打印的是arr的哈希值,也就是内存地址
System.out.println(arr[x])才是打印数组中的元素
回复 使用道具 举报
System.out.println(arr[x]);
打印取出元素的内容就要用这种格式arr[x],因为数组存在堆内存中实际存的是角标,一个角标对应一个元素值,
要打印出元素内容,就要用这种格式arr[x],通过找到角标取出角标对应的元素内容。
System.out.println(arr);为什么会输出[I@de6ced样的错误结果
你直接打印arr,arr是个数组名,一个数组在堆内存中存储都有一个相应的地址值,所以直接打印arr就会出现[I@de6ced
[I@de6ced解析:[代表一维数组,如果是[[代表二维数组,de6ced表示通过哈希算法算出的哈希值,即数组存储的地址值
回复 使用道具 举报
因为printArr(arr);是没有返回值的方法,arr是这个数组对象的引用变量,是地址值,所以输出的结果是类似[I@de6ced这样的情况
回复 使用道具 举报
柯玲 发表于 2012-6-18 10:20
很明显,调用printArr(arr)是因为printArr()是改java类中的一个方法,主函数中,要调用某方法,当然是先找 ...

呵呵,当时只是针对他提的问题点给的回复,倒是没注意到返回值的问题,不过我也给的建议是在主函数中输出数组元素。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马