为什么空字符串有效且空字符不是? 我原以为空字符串不是字符串而是占位符。对于char来说相同,但是创建一个空char甚至不能编译。
我想知道为什么会发生以下情况 - 编译 -
String s = "";
不编译 -
char c = '';
答案 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>