黑马程序员技术交流社区
标题:
我们知道对泛型进行参数化,参数只能是引用类型,可是.....
[打印本页]
作者:
胡建彪
时间:
2012-9-20 18:23
标题:
我们知道对泛型进行参数化,参数只能是引用类型,可是.....
public static void main(String[] args)
{
swap(new String[]{"aaa","bbb","ccc"},1,2);
swap(new int[]{1,2,3,4,5},4,5);
}
public static <T> void swap (T[] arr ,int i,int j){
T tem = arr[i];
arr[i]= arr[j];
}
第二个swap 总是报错误。 求解
作者:
皮卫凯
时间:
2012-9-20 18:30
swap(new int[]{1,2,3,4,5},4,5);
这位同学,你角标越界了。
角标:0 1 2 3 4
数值:1 2 3 4 5
4和5 交换 ,5越界啦。
作者:
黑马张涛
时间:
2012-9-20 18:31
public static void main(String[] args)
{
swap(new String[]{"aaa","bbb","ccc"},1,2);
swap(new Integer[]{1,2,3,4,5},4,3);//既然知道了泛型的参数只能是引用类型,你为什么要传一个基本类型的参数?
}
public static <T> void swap (T[] arr ,int i,int j)
{
T tem = arr[i];
arr[i]= arr[j];
arr[j]=tem;
}
复制代码
作者:
杨卫腾
时间:
2012-9-20 18:50
public static void main(String[] args)
{
swap(new String[]{"aaa","bbb","ccc"},1,2);
swap(new Integer[]{1,2,3,4,5},4,5);
}
public static <T> void swap (T[] arr ,int i,int j){
T tem = arr[i];
arr[i]= arr[j];
arr[j] = tem;
}
第二个swap 总是报错误?
其实这个是由于你没有在函数的开始定义类型,泛型,不是基本数据类型呀。
int基本数据类型,你用该使用引用数据类型,所以你应该改成是 Integer
作者:
胡建彪
时间:
2012-9-20 23:54
皮卫凯 发表于 2012-9-20 18:30
swap(new int[]{1,2,3,4,5},4,5);
这位同学,你角标越界了。
我原来的程序有个6的,少写了一个 数字 ,:#
作者:
胡建彪
时间:
2012-9-21 00:05
黑马张涛 发表于 2012-9-20 18:31
我知道泛型的参数只能是引用类型,开始错误的想当然了,泛型 T是定义的数组的类型,而不是定义的数组,而数组的类型中 int 是基本类型不是引用类型。因此 ,此例中需要改成 new Integer[]{1,2,3,4,5,6}.
Thanks for replying.
作者:
杨华东
时间:
2012-9-21 11:22
public static void main(String[] args)
{
swap(new String[]{"aaa","bbb","ccc"},1,2);
swap(new Integer[]{1,2,3,4,5},4,5);
}
public static <T> void swap (T[] arr ,int i,int j){
T tem = arr[i];
arr[i]= arr[j];
arr[j] = tem;
}
第二个swap 总是报错误?
首先肯定的,做得很好 用到了自动装箱和拆箱(值得借鉴)。
但是呢 你的 角标越界了
函数是正确的:
public static <T> void swap (T[] arr ,int i,int j){
T tem = arr[i];
arr[i]= arr[j];
arr[j] = tem;
}
这里越界了:swap(new Integer[]{1,2,3,4,5},4,5);
原因:数组new Integer[]{1,2,3,4,5}的长度是5 最大角标是5-1=4!!你却写出了带有5的角标!!!!
简单的问题。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2