[英]String.valueOf() behavior with char[] in List<char[]>
我正在使用char[]
和Collection
使用以下代碼: -
char[] ch = { 'a', 'b', 'c' };
List<char[]> chList = new ArrayList<char[]>();
chList.add(new char[]{'d','e','f'});
chList.add(new char[]{'g','h','i'});
String chSt = String.valueOf(ch);
String chListSt = chList.toString();
System.out.println(chSt); // outputs abc
System.out.println(chListSt); // outputs [[C@8288f50b, [C@b6d2b94b] instead [def, ghi]
現在我在上面觀察到的是: -
String chSt = String.valueOf(ch);
我知道上面的代碼行為對於String.valueOf()
char[]
是正確的,所以對於上面的代碼,打印出abc
。 現在考慮下一行。
String chListSt = chList.toString();
同樣對於上面的代碼,我知道List
的toString()
是在AbstractList
中定義的,在這個overriden toString()
的代碼中我找到了buffer.append(next);
它調用char[]
上的String.valueOf()
方法,該方法對應於next
。
因此它也應該像[def, ghi]
一樣打印,就像在String chSt = (String.valueOf(ch));
使用char[]
的直接情況一樣String chSt = (String.valueOf(ch));
為什么這兩種情況都會出現這種變化,而在char[]
上調用相同的方法String.valueOf()
?
你看到調用String.valueOf
不同重載的區別。 這是一個更簡單的例子:
public class Test {
public static void main(String[] args) {
char[] chars = { 'a', 'b', 'c' };
System.out.println(String.valueOf(chars)); // abc
Object object = chars;
System.out.println(String.valueOf(object)); // [C@...
}
}
您在StringBuffer
或StringBuilder
找到的調用只是調用String.valueOf(Object)
- 然后在數組上調用toString()
(在檢查引用后不為null)。 數組不會覆蓋Java中的toString
,因此您獲得的輸出。
代碼String chListSt = chList.toString();
簡單地調用List的toString()實現。 List實現調用元素上的toString()實現。
您當前的列表將列表中的數組對象作為元素,因此您將在控制台上獲得一個array.toString()表示,從而生成為char []打印的十六進制代碼。
而不是char []嘗試在數組中保存字符串。 它將具有相同的性能,結果將是可讀的。
char[] ch = { 'a', 'b', 'c' };
上面的一個是文字,因此valueof()
方法賦予它值。
chList.add(new char[]{'d','e','f'});
chList.add(new char[]{'g','h','i'});
這些列表中存儲了對象,因此您獲得了他們的哈希碼...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.