Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在char c='';不是吗?_Java - Fatal编程技术网

Java 为什么在char c='';不是吗?

Java 为什么在char c='';不是吗?,java,Java,为什么空字符串有效而空字符无效? 我本以为空字符串不是字符串,而是占位符。字符也是如此,但创建空字符甚至不会编译 我想知道的是为什么会发生以下情况- 汇编— String s = ""; 不编译- char c = ''; 因为char表示单个字符,而'不是。字符串可以包含零个或多个字符,但字符只能是单个字符。可能是因为字符是基本类型,而字符串是对象。 boolean、int等也不允许“空”值。“是一个空字符数组 “根本不是一个字符。空字符串就像一个不包含任何内容的容器。char必须有一个值

为什么空字符串有效而空字符无效? 我本以为空字符串不是字符串,而是占位符。字符也是如此,但创建空字符甚至不会编译

我想知道的是为什么会发生以下情况- 汇编—

String s = "";
不编译-

char c = '';

因为
char
表示单个字符,而
'
不是。字符串可以包含零个或多个字符,但字符只能是单个字符。

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

是一个空字符数组


根本不是一个字符。

空字符串就像一个不包含任何内容的容器。
char
必须有一个值,如果没有一个字符,就没有从中派生该值的位置。

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


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

对。理论上,它可以这样定义。但是请相信我,如果您仔细思考所有问题(例如,如何表示空字符,应用程序如何处理它等等),您将得出结论,这样做的好处很少,缺点也很大

无论如何,这样做仅仅是为了在字符串和字符文本之间保持语法一致性是完全疯狂的。您不会破坏语言的性能和/或语义,从而使语法看起来很好


一位对公认答案的评论认为,
'
的含义应与
'\0'
相同。但与此相反的论点是,
“\0”
并不意味着没有字符。它表示一个值为零的字符。因此,如果
实际上意味着一个字符,那么它是误导性的。既然已经有了一种表示这一点的方式<代码>'\0'。。。第二种表示它的方式是多余的

如果某个新的语言语法既有误导性又有冗余,那么很难证明添加它是合理的


作为对SoloBold评论的回应,虽然可以定义一种字符类型来实现这一点,但它需要更多的空间。至少1位,更可能是16位,以避免尴尬的内存对齐问题。32位
char
类型不可接受。。。即使它确实解决了其他问题。

您可以将字符串视为一个字符序列。有一个没有字符的空序列是有意义的,有一个不是字符的字符则没有意义


也不要使用
strings=newstring(“”)
,只要
String s=“”
就足够了。

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

字符串是一组字符,可以是0或更多。所以空字符串是有效的-没有任何字符。但是char表示字符的基元类型,它必须是一个有效字符,而“”不是。

顺便说一句,您可以对基元
char
类型使用对象包装器:

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

当您希望字段为“字符或无”时,这可能很有用。

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


不能有空字符,这是不合逻辑的。

字符是基本类型,因此需要给出一个值(不管它是什么)。 如果希望将变量保留为“未定义”,可以使用包装器对象:

Character c = null;

通过这种方式,变量c不包含(尚未)任何值。但是,请确保添加一个值!:)

我想你应该试着了解空白字符/字符串和空白字符/字符串之间的区别。空白字符/字符串是指具有某些内容的字符/字符串,例如“”(空格)、“\t”等,而空字符/字符串没有任何内容,可以被视为空容器。

是的,这就像将整数设置为。。没有。实际上,我假设编译器会将变量初始化为(字面上)0,这在任何编码中都不是字符。我想…@安德鲁:角色0是一个角色。具体来说,它被称为
NUL
'\0'
。它与C解析器有关。解析器需要一个“'”、一个字符(或一个反斜杠后跟一个转义字符)和一个“'”@AndrewJ.Brehm:当然,语言设计者本可以将
'
等效为
'\0'
,但他们选择不这样做,可能是因为这会导致沿着,“在Java中,
是什么意思?“如果您的示例编译成功,您希望
c
具有什么值?事实证明,您不能拥有一个没有值的
char
。一个<代码> char < /> >,像<代码> int <代码>或<>代码>双//> >必须始终有一定的值。如果需要特殊的“无字符”值,可以将<代码>字符<代码>设为null。java不是C++;不要将字符串初始化为新字符串(“”)。这将导致创建2个字符串。相反,如果需要空字符串(例如string example=“”),请将其初始化为“”。或者ASCII 0可以表示为
'\0'
。ASCII 0是NUL,即单个字符。它确实存在,作为以NULL结尾的字符串中的终止符。正如其他人所指出的,
new
关键字在这里是不必要的,实际上在每种情况下都会创建2个对象;一个用于
“A”
零件,一个用于
新的
Character c = null;