2014-03-29 69 views
0

在java中有一個與toCharArray混淆。當我寫這段代碼時,我注意到在這行ch = str.toCharArray(); char數組已被調整大小之後。toCharArray是否調整字符數組的大小?

public static void main(String[] args){ 
    String str = "helo java"; 
    char[] ch = new char[str.length() + 1]; 
    ch = str.toCharArray(); 
    ch[str.length()] = '\uFDD0'; 
    for(int i = 0; ch[i] != '\uFFD0'; i++){ 
     System.out.print(ch[i]); 
    }   
} 

所以我的問題是否這個函數重新調整大小的數組? 對不起我的英文不好。謝謝

+0

這將引發異常'CH [str.length()] ='\ uFDD0';' –

回答

1

.toCharArray()分配一個字符數組,這意味着你在這裏失去你的原始數組。

不喜歡這個:

final CharBuffer charbuf = CharBuffer.allocate(str.length() + 1); 
// String implements CharSequence, so this works 
charbuf.append(str).append('\uffd0'); 
// charbuf.array() contains the underlying char array 
2

toCharArray()方法返回一個新的字符數組,所以你以前的原單字符數組失去
Accroding到String#toCharArray

返回一個新分配的字符數組,它的長度是此字符串的長度和其內容被初始化包含由此字符串表示的字符序列。

+2

大家知道,鏈接到的文檔是兩個主要版本,超過2.5年過時。我更新了Java 8的鏈接。如果您不想更改,請隨時返回。 –

+0

@TheGuywithTheHat我不想改變它:)謝謝你提醒我。 – Prabhaker

0

toCharArray不調整字符數組的大小。

char[] ch = new char[str.length() + 1];創建長度的)的新陣列10 str.length(是9.

ch = str.toCharArray();分配CH引用由str.toCharArray返回一個新的數組();所以現在ch引用了一個大小爲9的數組。

現在ch[str.length()]將導致異常。

0

是什麼char[] ch是字符數組的引用,您可以分配通道到不同的陣列,例如:

char[] a = new char[1]; 
char[] b = new char[2]; 

char[] ch; 
ch = a; // here ch is pointing to the same array as a, so it's length is 1. 
ch = a; // here ch is pointing to the same array as b, so it's length is 2. 

所以,你可以編寫你想要這樣做(當然有很多可能的實現):

public static void main(String[] args) { 
    String str = "hello java"; 
    char[] ch = str.toCharArray(); 
    ch = Arrays.copyOf(ch, ch.length+1); 
    ch[ch.length-1] = '\uFDD0'; 
    for (int i = 0; i< ch.length; i++) { 
     System.out.print(ch[i]); 
    } 
} 

正如你所看到的,你可以使用Arrays.copyOf()來獲得你的數組副本的一個新的長度,然後在那裏介紹你的新角色。

請注意,你在你的停止條件使用ch[i] != '\uFFD0'迭代,這是不正確的在Java中,因爲你比較指針,而是使用!(ch[i].equals('\uFDD0')