Java数组操作的疑惑
刚接触java,看来看和C语言很相似,先看下基础知识,今天改完论文,接着昨天的看,看到数组介绍,对数组进行排序操作,出现了让我困惑的问题,大概是因为只知道C语言的原因吧。说下操作过程,很简单
定义一个一维数组:
`int arr[] = {2,7,1,8,5};`
进行直接排序:
public static int[] Bubblesortupd(int[] array)//定义排序子函数
{
int[] temp = array;
int temp1 = 0;
for(int i=0;i<temp.length-1;i++)
{
int index = i;
for(int j=i+1;j<temp.length;j++)
{
if(temp[index]<temp[j])
{
index = j;
}
}
temp1 = temp[i];
temp[i] = temp[index];
temp[index]=temp1;
}
return temp;
}
int arr1[] = Bubblesortupd(arr);//进行排序
for(int i = 0;i<arr1.length;i++)
System.out.print(arr1[i]+"、");
System.out.println();
首先看下排序前数组arr[]为:2,7,1,8,5
排序后输出结果arr1[]为:8,7,5,2,1
在排序后再次打印原来的数组arr[]为:8,7,5,2,1
!!!原谅我这个不懂Java的,原数组被改变了。
在C语言里不是这样的,突然想起Java没有指针,应该是这样的
在进行排序时,传递参数后,子函数里的操作数组仍然和原数组指向同一个内存地址,因此经过排序函数后,原数组也被改变了。
明白就好,毕竟人家省去了指针呢,怎么办呢?修改几次发现需要将原数组内容拷贝到新数组中再对新数组进行操作,不能简单的将新数组变量指向原数组,因此,需要在排序子函数中将
int[] temp = array;
改为:
int[] temp = Arrays.copyOf(array, array.length);
拷贝目标操作,这样确实有效果。就这样吧