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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 3040789425 于 2014-8-25 12:10 编辑

package test;

public class fdasfsadf {

        public static void main(String[] args) {
                showT('d','a','a','a','a','a');
                showT("\n");
                char[] a1={'d','a','a','a','a','a'};
                showT(a1);
                showT("\n");
                showT(1,2,4,5,6,7,8,9,12);
                showT("\n");
                int[] arr={1,2,4,5,6,7,8,9,12};
                showT(arr);
                showT("\n");
               
                show(1,2,4,5,6,7,8,9,12);
                showT("\n");
                int[] arr1={1,2,4,5,6,7,8,9,12};
                show(arr1);
                showT("\n");

        }
            
        public static <T> void showT(T... arr)  //int... 为可变参数数组,既可以接收数组又可以接收数组原材料,
           {                                    // 自动封装成数组,再传入
                for(T a:arr)
                System.out.print(a+" ");
        }                                
        public static  void show(int... arr)  //int... 为可变参数数组,既可以接收数组又可以接收数组原材料,

{
         for(int a:arr)              
         System.out.print(a+"   ");
}


}

运行结果:
           d a a a a a
[C@68bcef
1 2 4 5 6 7 8 9 12
[I@7bd86d
1   2   4   5   6   7   8   9   12   
1   2   4   5   6   7   8   9   12   
问题:
        定义的泛型可变参数函数
                                                showT(1,2,4,5,6,7,8,9,12);,              正确输出
                                                 int[] arr={1,2,4,5,6,7,8,9,12};  showT(arr);   输出地址        ???为什么输出的是地址不是内容
         定义的可变参数函数            
                                                show(1,2,4,5,6,7,8,9,12);,              正确输出
                                                 int[] arr1={1,2,4,5,6,7,8,9,12};  show(arr1);   正确输出                  



4 个回复

倒序浏览
传递可变参数,遍历数组。你遍历的是传递参数进去之后而形成的数组,而不是遍历传递进去的数组。传递一个数组元素,所以打印的也是数组元素。我这么理解的
回复 使用道具 举报
陶圣虎 发表于 2014-8-22 16:47
传递可变参数,遍历数组。你遍历的是传递参数进去之后而形成的数组,而不是遍历传递进去的数组。传递一个数 ...

   但是这个示例可以输出12345678912  
   int[] arr1={1,2,4,5,6,7,8,9,12};  show(arr1);   正确输出     
回复 使用道具 举报
因为数组也是泛型的一种,所以第一个输出的是地址,而第二个你的参数都决定了是int啦,当然没问题了。
回复 使用道具 举报
何艳梅 发表于 2014-8-23 21:53
因为数组也是泛型的一种,所以第一个输出的是地址,而第二个你的参数都决定了是int啦,当然没问题了。 ...

你是说,函数将数组名当作泛型的确定类型,所以就是确定数组为自动包装的数组的成员,说白了就是将数组名当作成数组元素了,谢谢了你的回答很好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马