gpt4 book ai didi

java - List 中 char[] 的 String.valueOf() 行为

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:39 24 4
gpt4 key购买 nike

我正在使用 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(); 

此外,对于上面的代码,我知道 ListtoString() 是在 AbstractList 和这个覆盖的代码中定义的 toString() 我发现 buffer.append(next); 调用 char[] 上的 String.valueOf() 方法> 对应于此处的 next

所以它也应该像 [def, ghi] 一样打印,就像 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()在数组上(检查引用不为空后)。数组不会覆盖 toString在 Java 中,因此得到的输出。

关于java - List<char[]> 中 char[] 的 String.valueOf() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31676682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com