簡體   English   中英

在Java中排序后數組的行為

[英]Behavior of an array after sorting in Java

我想對以下程序的行為有一些看法:

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
    }
}

根據我的聲明,1對aArr引用的字符數組進行排序,但是當涉及到語句2時,字符數組的排序正在發生,但不知何故,排序的數組沒有被任何變量引用,因此行為丟失了。 也許有人請幫我一樣。

好吧,讓我們看看會發生什么。

首先, a.toCharArray() 這將返回一個包含字符“aabbaabb”的新char數組。

然后,對此數組進行排序。

你沒有給自己一種方法來訪問陣列,所以你不能。 這就是“失去”的意思。 沒有什么特別的或魔法發生,你只是制作了一個你無法訪問的陣列。 它不會浪費內存 - 垃圾收集器會檢測到它無法被訪問,並將其銷毀。

它類似於你只是在沒有排序的情況下做到這一點:

a.toCharArray();

再一次, toCharArray為你做了一個數組,你沒有給自己一個使用它的方法,所以它也“丟失”了。 分揀是紅鯡魚。

是。 你是對的。

每次調用toCharArray()實際上都會創建一個包含字符串中字符的新數組實例。

對於aArr ,實際上是指新的數組實例,使用aArr進行排序。 它是由變量aArr引用的數組實例,它被排序。

但是當你將a.toCharArray()傳遞給Array.sort()方法時,你傳遞的數組實例沒有引用的變量。 數組實例已排序,但您沒有任何引用。

當你再次使用a.toCharArray()調用println會創建一個新的數組實例並傳遞給println ,這顯然是未排序的。

Arrays.sort(a.toCharArray());

a.toCharArray()返回的數組進行排序,而不是對字符串a進行排序。 因此,無論何時執行a.toCharArray()您都會獲得String的separate(new) Character array 因此它是未分類的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM