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()
总是返回一个新实例。