如果数组有int值,java - print()不输出char数组?

时间:2010-07-10 02:01:40

标签: java

我对Java如何处理转换感到困惑。

我的char数组由0(不是'0')

组成
char[] bar = {0, 'a', 'b'};
System.out.println(String.valueOf(bar));

当发生这种情况时,println方法不会输出任何内容。但是当我把零视为角色时:

char[] bar = {'0', 'a', 'b'};
System.out.println(String.valueOf(bar));

然后按预期输出“0ab”。

我的理解是,如果您声明具有空值的基本类型数组,如:

char [] foo = new char [10];

这些空单元格在Java中的默认值为0,所以我认为在char数组中有0可以,但似乎没有。任何人都可以解释为什么打印方法甚至不输出'a'和'b'?

2 个答案:

答案 0 :(得分:2)

正如您所发现的,整数0和字符文字'0'的字符值是不同的。要将数字转换为十进制数字的字符表示,您需要执行以下操作:

int digit = ... // some value between 0 and 9
char ch = (char)(digit + '0');

你也可以这样做:

int digit = ... 
char ch = Character.forDigit(digit, radix);

其中radix的值介于Character.MIN_RADIXCharacter.MAX_RADIX之间。 10的基数给出一个十进制数字。请参阅Character.forDigit(int,int)

字符值零是Unicode代码点NULL(0x0000)。这是一个不可显示的“控制角色”。如果你试图显示它,你可能会看到任何一个(你正在获得)或一个特殊的字形,意思是“我不能显示这个字符”。

答案 1 :(得分:2)

你的困惑比标题所暗示的更基本,它与数组无关,也与打印有关,而与Java中的char数据类型无关(在许多语言中,与C相关)。 试试这个:

char c1 = 0;
char c2 = '0';
System.out.println(c1 == c2); // false

进一步说:

     char c1 = 48;  // unicode code-point of character '0' = 0x30 = 48
     char c2 = '0';
     System.out.println(c1 == c2); // true
     c1 = 97; // unicode code-point of character 'a' = 0x61 = 97
     c2 = 'a';
     System.out.println(c1 == c2); // true

请参阅,char数据类型实际上是一个整数值(通常)表示代码点,即分配给Unicode中文本字符的数值 (假设我们在BMP内部)(并且回想一下,对于ASCII字符,即低于128的代码点,ASCII和Unicode具有相同的代码点)。所以,char c1='a'是一种快捷方式,可以说“为c1分配对应于字符'a'的代码点的整数值