如何使用Java array.sort

如何使用Java array.sort,java,arrays,sorting,Java,Arrays,Sorting,我正在学习array.sort(…)在Java中的工作原理 为什么变量:temp和dopas都在唯一排序temp之后排序 System.out.println("Before"); for (int i = 0; i < POP; i++) System.out.println(dopas[i]+""); //dopas is unsorted System.out.println("After"); float[] temp=dopas; Arrays.sort

我正在学习
array.sort(…)
在Java中的工作原理

为什么变量:
temp
dopas
都在唯一排序
temp
之后排序

System.out.println("Before");
for (int i = 0; i < POP; i++)
  System.out.println(dopas[i]+"");           //dopas is unsorted

System.out.println("After");
float[] temp=dopas;
Arrays.sort(temp);                           //sort temp

for (int i = 0; i < POP; i++)
  System.out.println(temp[i]+" "+dopas[i]);  //Both temp and dopas are now sorted
System.out.println(“之前”);
for(int i=0;i

我希望dopas保持未排序。

因为在Java中,您通过引用而不是通过值访问数组


因此
temp
dopas
都是对同一数组的引用。

数组是Java中的对象,因此在使用数组变量时实际上是对数组的引用

因此,这条线

float[] temp=dopas;
将仅将引用复制到数组
dopas
。之后,
dopas
temp
指向同一个数组,因此在使用
sort()
后,这两个数组都将显示为已排序


使用
System.arrayCopy
Arrays.copyOf
创建数组的副本。

当您分配
temp
dopas
值时,它不会复制,而是使变量引用同一数组

为什么在Array.sort之后两个数组都被排序


因为只有一个数组<代码>浮点[]温度=dopas不创建新数组或复制现有数组内容。它只是复制一个数组引用。。。这样您就可以在两个位置引用同一个数组。

因为两个数组temp和dopa都是相同的。分配
temp=dopas将引用分配给数组。它不复制其内容。这就是为什么在对第一个数组进行排序时,也会对第二个数组进行排序。

temp和dopas共享同一个指针,因为您不创建新的数组实例,所以只需分配同一个指针。

dopas
temp
引用同一个数组,可以互换使用

float[] temp=dopas;

在这一行之后,
temp[i]
将与
dopas[i]
完全相同

因为temp和dopas是对同一数组的两个引用

因为temp和dopas(我们称之为变量)是指向内存中空间的指针。通过使用代码

float[] temp = dopas
您只需说让“temp”指向内存中与dopas相同的空间。因此,结果是内存中有两个指向同一空间的指针。通过对temp进行排序,您可以对该空间的内容进行排序,因此通过在代码后面引用dopas,您可以访问完全相同的数据


PS:Dogmatixed提到了你问题的解决方案。

你的作业:
float[]temp=dopas
实际上只是将引用复制到数组。我认为您要做的是
float[]temp=dopas.clone()

temp
只是对
dopas
的引用。实际上,内存中只有一个数组

如果希望
temp
成为
dopas
的副本,请尝试:

float[] temp = Arrays.copyOf(dopas, dopas.length);

这样,您将深度复制数组,而不是浅层复制它

temp正在引用dopas,因此当dopas被排序时,temp也会引用。它们实际上指向同一个数组。希望这有帮助。

temp和dopas正在引用同一个数组

如果您想让temp像一个新数组一样工作,那么使用clone()方法

float[] temp = dopas.clone();
方法创建一个新数组,并将dopas的内容复制到新创建的数组中