Java中char数组的默认值是啥?

Posted

技术标签:

【中文标题】Java中char数组的默认值是啥?【英文标题】:What are the default values of the char array in Java?Java中char数组的默认值是什么? 【发布时间】:2016-06-07 19:46:14 【问题描述】:

如果我像这样分配字符数组:

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 这不是 ASCII 码,而是 Unicode 码点。 This one 准确地说。 更好地使用集合 List 来检查空列表,该列表会根据元素的数量自动增长和收缩,因为检查数组中的每个元素是否为空数组将导致 O(n) 复杂性不是很好。 这是一个面试问题,他们希望看到两种解决方案:使用和不使用数据结构。在这里工作的是不使用链表的那个 不是\u0000\0 一样吗? 【参考方案1】:

它与任何类型相同:该类型的默认值。 (因此与您进入未专门初始化的字段相同。)

默认值在JLS 4.12.5中指定:

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

话虽如此,听起来你真的想要一个List<Character>,它可以跟踪集合的实际大小。如果您需要随机访问列表(例如,即使您没有填充元素 2,您也希望能够填充元素 25),那么您可以考虑:

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

(如果不了解您在做什么,很难知道其中哪一个最合适。)

【讨论】:

这是一个面试问题,他们希望看到两种解决方案:使用和不使用数据结构。在这里工作的是不使用链表(或哈希表)的那个。 需要判断字符串是否包含所有唯一字符 char 和 Character 数据类型有什么区别? @user1090944:听起来你只需要一个boolean[]。听起来您有效地将字符用作,而不是值。 @user1090944: char 是原始类型,Character 是它的包装类。这是一个更大的话题......【参考方案2】:

您也可以将其转换为 int 然后进行比较。 对于前 - 假设我将我的数组声明为

char[] arr = new char[10];
arr[3]='1';

然后,下面的代码

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

会输出

1

【讨论】:

以上是关于Java中char数组的默认值是啥?的主要内容,如果未能解决你的问题,请参考以下文章

char 类型变量的默认值是啥意思,它等同于啥字符?

int和integer的区别是啥?

java中string类型变量的默认初始值是啥?

在Java中设置数组值[重复]

java中在一个类中如何设定默认值

数组动态初始化时,数组元素会被赋予一个默认值,简述各数据类型的初始值?