java - print () не выводит массив char, если массив имеет значение int? - PullRequest
2 голосов
/ 10 июля 2010

Я немного озадачен тем, как Java обрабатывает преобразование.

У меня есть массив символов, состоящий из 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];

эти пустые ячейки имеют значение по умолчанию 0 в Java, поэтому я подумал, что было бы нормально иметь 0 в массиве char, но, похоже, что нет. Кто-нибудь может объяснить, почему метод print даже не выводит 'a' и 'b'?

Ответы [ 2 ]

2 голосов
/ 10 июля 2010

Ваша путаница является более простой, чем предполагает заголовок, и она не связана с массивами или печатью, но относится к типу данных char в Java (и во многих языках, например, 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'"

2 голосов
/ 10 июля 2010

Как вы обнаружили, символьное значение целого числа 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_RADIX до Character.MAX_RADIX.Основа 10 дает десятичную цифру.См. Character.forDigit(int,int).

Ноль символа - это кодовая точка Unicode NULL (0x0000).Это не отображаемый «управляющий символ».Если вы попытаетесь отобразить его, вы, скорее всего, не увидите ничего (как видите) или специальный символ, означающий «Я не могу отобразить этот символ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...