为什么新的String(“”)编译而char c =''没有?

时间:2011-08-24 11:11:57

标签: java

为什么空字符串有效且空字符不是? 我原以为空字符串不是字符串而是占位符。对于char来说相同,但是创建一个空char甚至不能编译。

我想知道为什么会发生以下情况 - 编译 -

String s = "";

不编译 -

char c = '';

13 个答案:

答案 0 :(得分:118)

因为char代表单个字符,''不是。字符串可以包含零个或多个字符,但字符不能是单个字符以外的任何字符。

答案 1 :(得分:34)

因为字符串文字表示可能由零个或多个字符组成的字符串,但是(有效)字符文字表示恰好一个字符。


  

char可以定义为可以存储0或1个字符的数据类型......

是。从理论上讲,它可以用这种方式定义。但相信我,如果你想通过所有问题(例如你如何代表一个空字符,应用程序将如何处理它等等),你会得出结论认为这些好处很少,并且显着的缺点。

无论如何,这样做只是以便String和char文字之间存在句法一致性将是完全疯狂的。您不会破坏语言的性能和/或语义,因此语法看起来不错。


对已接受答案的一条评论建议''应与'\0'相同。但反驳的是'\0'并不意味着没有人物。它表示一个值为零的字符。因此,如果'' 实际上意味着一个字符,则会产生误导。而且因为已经有一种方法可以表示这种... '\0' ......第二种表示它的方式是多余的。

如果某些新语言语法既误导又多余,则很难证明添加它。

在处理SoloBold的注释时,虽然可以定义一个字符类型来执行此操作,但它需要更多空间。至少1位,更可能是16位,以避免尴尬的内存对齐问题。 32位char类型是不可接受的......即使它确实解决了其他问题。

答案 2 :(得分:13)

""是一个空字符数组。

''根本不是角色。

答案 3 :(得分:8)

空字符串就像一个什么都没有的容器。 char必须有一个值且没有一个字符,因此无法从中获取该值。

答案 4 :(得分:5)

您可以将String视为一系列字符。拥有一个没有字符的空序列是有道理的,拥有一个不是字符的字符则不然。

也永远不要使用String s = new String("");,只需String s = ""即可。

答案 5 :(得分:4)

在数学上,字母A是一组符号,假设字母A = {a,b,c,d,...,z}。字符串L是来自字母表的零个或多个字符的序列,即L = A *。空字符串只是一个零字符序列;而“空字符”不是字母表的成员。

你不能有空角色,这是不合逻辑的。

答案 6 :(得分:4)

char是一种原始类型,因此您需要提供一个值(无论它是什么)。 如果要将变量保留为“未定义”,则可以使用包装器对象:

Character c = null;

通过这种方式,变量c不包含任何值。但是一定要增加价值! :)

答案 7 :(得分:2)

顺便说一句,您可以使用对象包装器来处理原始char类型:

Character c = null;
Character c2 = 'a';

当您希望字段“既可以是字符也可以不存在”时,这非常有用。

答案 8 :(得分:2)

String s = null;              // OK
String s = new String("");    // OK
String s = new String("A");   // OK
String s = new String("ABC"); // OK

char c = 'A';                     // OK
char c = '';                      // NOT OK!
Character c = null;               // OK
Character c = new Character('A'); // OK
Character c = new Character('');  // NOT OK!

答案 9 :(得分:0)

可能是因为char是基本类型,而String是对象。 boolean,int等也不允许“空”值。

答案 10 :(得分:0)

字符是单个字符,即字母,数字,标点符号,制表符,空格或类似字符。

答案 11 :(得分:0)

String是一组字符,可以是0或更多。所以空字符串是有效的 - 没有任何字符。 BUt char表示Character的原始类型,它必须是一个有效字符,而不是。

答案 12 :(得分:0)

我认为您应该尝试了解空白字符/字符串与空字符/字符串之间的区别。 blank char / string是指包含某些内容的字符/字符串,例如''(SPACE),'\ t'等等,而空的字符/字符串没有任何内容,可以看作是一个空容器。< / p>