Java中char类型的初始值

34

在方法中定义一个 int 变量并将其初始化为 0 直到计算出特定的 int 值。那么一个 char 值可以初始化为什么呢?
char retChar = ''; 这会导致错误,如果初始化为 -1,则会提示字符过多。


1
“你可以在方法内定义一个 int 变量并将其初始化为 0,直到你计算出 int 的特定值为止。”...说的是你自己。如果我想这样做,我会使用 Integer 而不是 int - skaffman
6个回答

53

通常情况下,对于局部变量,我尽可能晚地初始化它们。很少需要“虚拟”值。但是,如果你确实需要,可以使用任何值-如果你确定在读取之前将为其赋值,则不会产生任何影响。

如果您想要0的char等效值,那就是Unicode 0,可以写为

char c = '\0';

这也是类型为char的实例(或静态)变量的默认值。


你的例子不正确。c = '\0' 表示八进制 0 而不是 Unicode 0。你应该使用 '\u0000' 来表示 Unicode 0。 - Anatolii Shuba
@AnatoliiShuba:不,它仍然是Unicode 0。'\0''\u0000'是相同的值。请参见https://gist.github.com/jskeet/191afed452e1f12dbb00493e29f69b68。 - Jon Skeet
我同意数值相等。但是我不同意你将代码 char c = '\0'; 称为“Unicode 0”。这是不正确的。请查看Java语言规范文档(任何版本)。'\0'字面量使用的是八进制转义序列,而不是你所提到的Unicode转义序列。 - Anatolii Shuba
正确的语句是 - 如果你想要0的char等价物,它可以被赋值为Unicode字面量'\u0000'或八进制字面量'\0'。 - Anatolii Shuba
1
@AnatoliiShuba:更准确地说,它是具有值为0的UTF-16代码单元。它与\u0000相同,就像16与0x10相同一样。不过,我并没有混淆不同的表示方式。然而,我怀疑我无法说服你我是正确的,你肯定也无法说服我你是正确的(即使你一开始就是正确的,这种吹毛求疵是否值得)。我建议我们让评论线程在这个点上结束。 - Jon Skeet
显示剩余2条评论

15

你需要将变量初始化为某个值

char retChar = 'x';

或者你让它自动初始化,这是默认的。

char retChar = '\0';

ASCII码中的数字0,与之相同

char retChar = (char) 0;

char类型可以初始化为什么值?

听起来作者并不确定是自动初始化(即您没有影响)还是显式初始化。但是您无法更改默认值。


4
我会这样做:

我只会这样做:

char x = 0; //Which will give you an empty value of character

2
您可以将其初始化为' '。您收到错误代码-1,因为它将“ -”和“ 1”视为不同的字符。

2
它说空字符字面量。因此,'' 可能不被允许。 - Pan
也许他的意思是“ ”(一个空格)? - asgs
是的,抱歉,单引号有点紧凑。我的意思是你可以将其初始化为空格' ',这是允许的。 - John Kane

0

正如您在链接的讨论中所看到的,没有必要使用特殊字符初始化char,因为它已经为我们完成,并由'\u0000'字符代码表示。

因此,如果我们只想检查指定的char是否已初始化,只需编写:

if(charVariable != '\u0000'){
 actionsOnInitializedCharacter();
}

问题链接:char的默认值是什么?


0
也许0'\u0000'可以吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接