黑马程序员技术交流社区
标题:
int数组是引用类型,为什么用在这不可以啊?
[打印本页]
作者:
她只是过客
时间:
2014-9-17 15:39
标题:
int数组是引用类型,为什么用在这不可以啊?
public class YinYong {
public static void main(String[] args) {
int[] arr = { 5, 4, 3, 2, 1 };
swap(arr, 0, 1);//这句话编译不通过
}
public static <T> void swap(T[] t, int i, int j) {
T temp = t[i];
t[i] = t[j];
t[j] = temp;
}
}
复制代码
泛型类型参数化只能是引用类型,不能是基本数据类型。
可是int数组是引用类型啊,怎么不可以?
作者:
Seven`
时间:
2014-9-17 16:49
本帖最后由 Seven` 于 2014-9-17 16:51 编辑
你定义的数组是一个int类型的,数组中的元素都是int类型,也就是说都是基本数据类型;
public static <T> void swap(T[] t, int i, int j) {
T temp = t
;
t
= t[j];
t[j] = temp;
}
这个方法中的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