黑马程序员技术交流社区

标题: int数组是引用类型,为什么用在这不可以啊? [打印本页]

作者: 她只是过客    时间: 2014-9-17 15:39
标题: int数组是引用类型,为什么用在这不可以啊?
  1. public class YinYong {

  2.         public static void main(String[] args) {
  3.                 int[] arr = { 5, 4, 3, 2, 1 };
  4.                 swap(arr, 0, 1);//这句话编译不通过
  5.         }
  6.         public static <T> void swap(T[] t, int i, int j) {
  7.                 T temp = t[i];
  8.                 t[i] = t[j];
  9.                 t[j] = temp;
  10.         }
  11. }
复制代码

泛型类型参数化只能是引用类型,不能是基本数据类型。
可是int数组是引用类型啊,怎么不可以?
作者: Seven`    时间: 2014-9-17 16:49
本帖最后由 Seven` 于 2014-9-17 16:51 编辑

你定义的数组是一个int类型的,数组中的元素都是int类型,也就是说都是基本数据类型;这个方法中的t和t[j]就都是int类型了
你可以换成Integer试试;
如有错误请指正

作者: Seven`    时间: 2014-9-17 16:53
Seven` 发表于 2014-9-17 16:49
你定义的数组是一个int类型的,数组中的元素都是int类型,也就是说都是基本数据类型;
  •         public s ...

  • 理解偏了,T是泛型,指的是所有Object的子类,如果定义int[]数组,那int就应该能继承于Ojbect;
    很明显int是基本数据类型,所以是不行的
    作者: lanzy1989    时间: 2014-9-17 20:20
    为什么非得用泛型,直接int temp=t【i】,t【i】=t【j】;t【j】=temp;不好吗?
    作者: 李国荧    时间: 2014-9-17 20:28
    学习一下……
    作者: 暴走的小青春丶    时间: 2014-9-17 21:16
    学习了,谢谢
    作者: 贾浩田    时间: 2014-9-18 13:07
    因为泛型只支持引用数据类型,数组是一种特殊的类型,基本数据类型组成的数组不是纯引用数据类型
    作者: 冒牌高手    时间: 2014-9-20 10:20
    int数组是引用,但是里面存储的是基本数据类型,所以不可以,你改为Integer就可以了
    作者: 荣英洁    时间: 2014-9-20 11:51
    本帖最后由 荣英洁 于 2014-9-20 12:08 编辑

    编译不能通过的原因是 int  不是类类型,学习过反射都知道,任何一个类,都有一个字节码,通过类名.class获得,或者对象名.getClass(),但是却没有int.class  可见int 不是类。泛型的占位符表示的是一个通用的类,既然int 不是类 自然编译通不过。int 的设计是为了符合大家编写代码的习惯,和加快运算。int的包装类型Integer,所以可以用Integer 代替 int 就能通过编译;      
      int[] arr = { 5, 4, 3, 2, 1 };
             Integer []aa=null;
             aa = new Integer[arr.length];
             for (int i = 0; i < arr.length; i++) {
             aa【i】=arr【i】;
       }
             swap(aa, 0, 1);//这句话编译可以通过
    同样的道理还有 double,float,char 等 都不是类,用到泛型是要用 他们的包装类型。

    作者: 泡沫__opt    时间: 2014-9-20 15:29
    学习了……




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