我正在学习Arrays.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
我预计多巴仍未分类。
答案 0 :(得分:22)
数组是Java中的对象,因此在使用数组变量时,实际上是使用对数组的引用。
因此行
float[] temp=dopas;
只会将引用复制到数组dopas
。之后,dopas
和temp
指向同一个数组,因此在使用sort()
后,它们都会显示为已排序。
使用System.arrayCopy
或Arrays.copyOf
创建数组的副本。
答案 1 :(得分:7)
您的作业:float[] temp=dopas;
实际上只是复制对数组的引用。我认为你想做的是float[] temp = dopas.clone();
答案 2 :(得分:6)
temp
只是对dopas
的引用。实际上内存中只有一个数组。
如果您希望temp
成为dopas
的副本,请尝试:
float[] temp = Arrays.copyOf(dopas, dopas.length);
这样,您将深层复制您的数组,而不是浅层复制它!
答案 3 :(得分:3)
因为在Java中,您通过引用访问数组,而不是按值。
因此temp
和dopas
都是对同一数组的引用。
答案 4 :(得分:3)
为什么在Array.sort后两个数组都被排序?
因为只有一个数组。 float[] temp=dopas;
不会创建新数组或复制现有数组内容。它只是复制一个数组引用 ...这样你就可以在两个地方引用同一个数组。
答案 5 :(得分:2)
当您为temp
赋值dopas
时,它不会复制,它会使变量引用相同的数组。
答案 6 :(得分:2)
因为temp和dopas(我们称之为变量)是指向内存空间的指针。通过使用代码
float[] temp = dopas
你只是说让“temp”指向内存中与dopas相同的空间。所以结果是你有两个指向内存中相同空间的指针。通过对temp进行排序,您将对该空间的内容进行排序,以便稍后在您访问完全相同的数据的代码中引用dopas。
PS:Dogmatixed提到了解决问题的方法。
答案 7 :(得分:1)
因为两个数组temp和dopas是相同的。赋值temp=dopas;
指定对数组的引用。它不会复制其内容。这就是为什么当您对第一个进行排序时也会对第二个进行排序的原因。
答案 8 :(得分:1)
dopas
和temp
引用相同的数组,可以互换使用。
float[] temp=dopas;
在此行之后,temp[i]
将与dopas[i]
完全相同。
答案 9 :(得分:1)
因为temp和dopas是对同一个数组的两个引用
答案 10 :(得分:1)
temp正在引用dopas,所以当dopas被排序时也是如此。他们实际上是指向同一个array.hope这有帮助。
答案 11 :(得分:0)
temp和dopas共享相同的指针,因为你没有创建一个新的数组实例,你只需指定相同的指针。
答案 12 :(得分:0)
temp 和 dopas 引用相同的数组。
如果你想让temp像新数组一样运行,那么使用 clone()方法。
float[] temp = dopas.clone();
clone()方法创建一个新数组,并将dopas的内容复制到新创建的数组中。