Java数组操作的疑惑(这篇错误,后来才知道是有static修饰的结果)

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);
拷贝目标操作,这样确实有效果。就这样吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值