2014-02-17 37 views
0

排序後,我想在下面的程序的行爲的一些看法:行爲數組在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中,字符數組的排序正在發生,但不知何故排序的數組沒有被任何變量引用,因此行爲會丟失。有人可以幫助我一樣。

+4

您的分析對我來說似乎是正確的。你的問題到底是什麼? –

+1

'String#toCharArray()'總是返回一個新的實例。 –

回答

1

是的。你是對的。

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

aArr的情況下,實際上是指新的數組實例,請使用aArr進行排序。它是由變量aArr引用的數組實例引用的。

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

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

1

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

首先,調用a.toCharArray()。這將返回一個新的char數組,其中包含字符「aabbaabb」。

然後,這個數組被排序。

你沒有給自己一種訪問數組的方式,所以你不能。這就是「失落」在這裏意味着什麼。沒有什麼特別的或魔術發生,你只是創建了一個你無法訪問的數組。它不會浪費內存 - 垃圾收集器會檢測到它不能被訪問,並將其銷燬。

它類似,如果你只是這樣做不排序:

a.toCharArray(); 

再次,toCharArray去,使一個數組你,你不給自己的方式來使用它,所以它也是「丟失」。分類是一個紅色的鯡魚。

0
Arrays.sort(a.toCharArray()); 

這種排序由a.toCharArray()返回的數組而不是字符串a。所以只要你做a.toCharArray()你得到一個字符串separate(new) Character array。因此它是未排序的。