为什么空字符串是有效的而空字符不是?
我本以为空字符串不是字符串,只是一个占位符。对于char同样如此,但创建一个空的char甚至无法编译。
我想知道的是为什么会出现以下情况 - 可以编译 -
我想知道的是为什么会出现以下情况 - 可以编译 -
String s = "";
无法编译 -
char c = '';
String s = "";
无法编译 -
char c = '';
char
表示单个字符,而''
并不是。一个字符串可以包含零个或多个字符,但是字符只能是单个字符。NUL
或'\0'
。 - Matthew Scharley''
等同于'\0'
,但他们选择不这样做,可能是因为这会导致一小部分持续的问题,例如“在Java中,''
代表什么?” - Marcelo Cantos是的。理论上它可以被定义为这样的数据类型。但是请相信我,如果你认真考虑所有问题(例如如何表示空字符,应用程序如何处理它等等),你会得出结论,其中有很少的好处,但有显著的缺陷。char可以定义为一种可以存储0或1个字符的数据类型...
''
应该与'\0'
具有相同的含义。但是对此的反驳是'\0'
并不意味着没有字符,它意味着一个值为零的字符。因此,如果''
实际上意味着一个字符,那么这是误导的。而且,既然已经有一种表示方法...即'\0'
...那么第二种表示方法就是多余的。char
类型是不可接受的...即使它可以解决其他问题。char
可以被定义为一种可以存储0或1个字符的数据类型,但它并没有被定义成那样。这也许是好事,因为空的char
没什么用处。 - wprlchar
值来表示“没有字符”的情况,要么扩大char
的大小以腾出空间来标记“没有字符”。 - Stephen C""
是一个空字符数组。
''
只是没有字符。
char
必须有一个值,而没有一个确切的字符,就无法从中派生出该值。您可以将字符串视为字符序列。有一个没有字符的空序列是有意义的,但有一个不是字符的字符是没有意义的。
此外,永远不要使用String s = new String("");
,只需要String s = ""
就足够了。
char是一种原始类型,因此您需要给它赋一个值(无论是什么)。 如果您想将变量保留为“未定义”,可以使用包装对象:
Character c = null;
这样,你的变量 c 目前并不包含任何值。但是一定要确保添加一个值! :)
从数学上讲,字母表A是一组符号,假设字母表A = {a,b,c,d,...,z}。字符串L是来自字母表中的零个或多个字符的序列,即L = A*。空串只是零个字符的序列;而“空字符”不是字母表的成员。
你不能有一个空字符,这是不合逻辑的。
顺便提一下,你可以使用对象包装器来处理原始的char
类型:
Character c = null;
Character c2 = 'a';
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!
new
关键字,实际上会导致每种情况下创建 2 个对象;一个是 "A"
部分的对象,另一个是基于/复制自 "A"
的 new
部分的对象... - johnny
c
具有什么值? - Gabechar
。就像int
或double
一样,char
必须始终具有某个值。 - GabeCharacter
对象设置为null。 - kapex'\0'
。 - Callum Rogers