Java中char数组的默认值是什么?

9
如果我像这样分配字符数组:
char[] buffer = new char[26];

它被分配的默认值是什么?我试图打印它,但只有一个空字符。

System.out.println("this is what is inside=>" + buffer[1]);

this is what is inside=>

是否有对应的 ASCII 码?我需要确定数组是否为空,当我用字符填充前五个元素后,我需要找出第六个元素是空的。谢谢。


默认值为\u0000。可以通过以下方式进行测试:buffer[1] == '\u0000',如果未初始化或具有默认值,则返回true - Braj
这不是ASCII码,而是Unicode代码点。确切地说,是这个 - fge
最好使用集合List来检查自动增长和缩小的空列表中的元素数量,因为检查每个数组元素是否为空将导致O(n)复杂度,这不是一个好的选择。 - Braj
这是一个面试问题,他们想要看到两种解决方案:一种使用数据结构,另一种则不使用。我正在这里研究不使用链表的解决方案。 - user1090944
“\u0000”和“\0”不是一样的吗? - itzjackyscode
2个回答

14

对于任何类型而言,都是该类型的默认值(与未特别初始化的字段中获得的默认值相同)。

这些默认值在JLS 4.12.5中指定:

 

对于char类型,默认值是空字符,即'\u0000'

话虽如此,听起来您真正需要的是List<Character>,它可以跟踪集合的实际大小。如果您需要随机访问列表(例如,您想能够填充第25个元素,即使您尚未填充第2个元素),则可以考虑以下选项:

  • 使用null作为“未设置”值的Character[],而不是'\u0000'(毕竟它仍然是一个字符...)
  • 一个Map<Integer, Character>
  • 如果您知道永远不会将值为'\u0000'的元素视为“已设置”,则坚持使用char[]

(不知道哪种方法最适合您,因为不知道您正在做什么。)


这是一个面试问题,他们想看到两种解决方案:使用数据结构和不使用数据结构。在这里我们正在处理不使用链表(或哈希表)的解决方案。 - user1090944
char 和 Character 数据类型有什么区别? - user1090944
@user1090944:这听起来好像你只需要一个boolean []。看起来你实际上是在使用字符作为而不是值。 - Jon Skeet
@user1090944:char是一种原始类型,Character是它的包装类。这是一个更大的话题... - Jon Skeet
@user1090944:这不是一个哈希表,只是一个简单的数组而已。你需要明白,哈希表要复杂得多。 - Jon Skeet
显示剩余3条评论

1
你也可以将其转换为整数,然后进行比较。例如 - 假设我将我的数组声明为:
char[] arr = new char[10];
arr[3]='1';

然后,以下代码

for(char c:arr){
    if((int)c!=0){
        System.out.println(c);
    }
}

将输出

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接