黑马程序员技术交流社区

标题: 基础视频第四天的疑问 [打印本页]

作者: 孙飞    时间: 2012-6-18 09:56
标题: 基础视频第四天的疑问
本帖最后由 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样的错误结果
作者: 唐辉辉    时间: 2012-6-18 09:59
本帖最后由 唐辉辉 于 2012-6-18 10:00 编辑

System.out.println(printArr(arr))   printArr()方法没有返回值,所以不能用println()方法输出。
System.out.println(arr);  这里的arr是一个数组,至于为是什么[I@de6ced ,这个是数组在内存中的地址值,[代表这是一个数组,I代表这是int的,@后面的代码唯一地址。如果要输出数组中的内容,需要整个遍历数组取数组中的值。
作者: 张立江    时间: 2012-6-18 10:01
arr对应的是内存中数组存储地址的哈希值
你需要打印arr数组里面的元素的话,就应该调用printArr()方法
作者: 柯玲    时间: 2012-6-18 10:20
很明显,调用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. }
复制代码

作者: 常佳杰    时间: 2012-6-18 10:21
哥们你是调用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
建议你仔细看看视频,里面讲解的比较清楚
作者: 刘笑    时间: 2012-6-18 10:25
建议你仔细看看视频,里面讲解的比较清楚
作者: 李建锋    时间: 2012-6-18 10:27
本帖最后由 李建锋 于 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的意思为调用此方法,不知您是否明白?


作者: rslheima    时间: 2012-6-18 10:37
首先,主方法中,调用了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]));
这样是错误的!!
作者: 胡卿    时间: 2012-6-18 10:49
System.out.println(arr)打印的是arr的哈希值,也就是内存地址
System.out.println(arr[x])才是打印数组中的元素
作者: 余清兰    时间: 2012-6-18 11:15
System.out.println(arr[x]);
打印取出元素的内容就要用这种格式arr[x],因为数组存在堆内存中实际存的是角标,一个角标对应一个元素值,
要打印出元素内容,就要用这种格式arr[x],通过找到角标取出角标对应的元素内容。
System.out.println(arr);为什么会输出[I@de6ced样的错误结果
你直接打印arr,arr是个数组名,一个数组在堆内存中存储都有一个相应的地址值,所以直接打印arr就会出现[I@de6ced
[I@de6ced解析:[代表一维数组,如果是[[代表二维数组,de6ced表示通过哈希算法算出的哈希值,即数组存储的地址值
作者: 李伟    时间: 2012-6-18 14:00
因为printArr(arr);是没有返回值的方法,arr是这个数组对象的引用变量,是地址值,所以输出的结果是类似[I@de6ced这样的情况
作者: 柯玲    时间: 2012-6-18 14:28
柯玲 发表于 2012-6-18 10:20
很明显,调用printArr(arr)是因为printArr()是改java类中的一个方法,主函数中,要调用某方法,当然是先找 ...

呵呵,当时只是针对他提的问题点给的回复,倒是没注意到返回值的问题,不过我也给的建议是在主函数中输出数组元素。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2