Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中排序后数组的行为_Java_Sorting - Fatal编程技术网

Java中排序后数组的行为

Java中排序后数组的行为,java,sorting,Java,Sorting,我想了解以下程序的行为: package main; import java.util.Arrays; public class StringAnagram { public static void main(String args[]) { String a = "aabbaabb"; char[] aArr = a.toCharArray(); Arrays.sort(aArr); //1 Arrays.sort(a.

我想了解以下程序的行为:

package main;
import java.util.Arrays;
public class StringAnagram {
    public static void main(String args[]) {
        String a = "aabbaabb";
        char[] aArr = a.toCharArray();

        Arrays.sort(aArr); //1
        Arrays.sort(a.toCharArray()); //2

        System.out.println(aArr); // Sorted
        System.out.println(a.toCharArray());  // UnSorted
    }
}

根据me,语句1对aArr引用的字符数组进行排序,但对于语句2,字符数组的排序正在进行,但排序后的数组没有被任何变量引用,因此行为丢失。有人能帮我做同样的事吗。

好吧,让我们看看会发生什么

首先,调用a.toCharArray()。这将返回一个包含字符“aabbaabb”的新字符数组

然后,对该数组进行排序

您没有为自己提供访问阵列的方法,因此无法访问。这就是“迷失”在这里的含义。没有什么特别或神奇的事情发生,你只是制作了一个无法访问的数组。它不会浪费内存——垃圾收集器将检测到无法访问它,并将其销毁

这类似于如果您只是在没有排序的情况下执行此操作:

a.toCharArray();
再一次,
toCharArray
为您创建了一个数组,您没有给自己一个使用它的方法,因此它也“丢失”。分类是一个骗局

Arrays.sort(a.toCharArray());
这将对
a.toCharArray()
返回的数组进行排序,而不是字符串a。因此,无论何时执行
a.tocharray()
操作,都会得到字符串的
单独(新)字符数组。因此它是未排序的。

是。你说得对

每次调用
tocharray()
实际上都会使用字符串中的字符创建一个新的数组实例

aArr
的情况下,您实际上引用了新的数组实例,使用
aArr
进行排序。它是被排序的变量
aArr
引用的数组实例

但是,当您将
a.tocharray()
传递给
Array.sort()
方法时,您传递的是一个数组实例,您没有引用该实例的变量。数组实例已排序,但您没有任何引用


当您再次使用
a.tocharray()
调用
println
时,将创建一个新的数组实例,并将其传递给
println
,这显然是未排序的

我觉得你的分析是对的。你的问题是什么?
String#toCharArray()
总是返回一个新实例。