Я готовлюсь к соревнованию, и в моем учебном пособии есть такой код:

char[] list=new char[5];
        list[1] = '1';
        list[2] = '2';
        list[3] = 3;
        list[4] = 4;

        System.out.println(list[0] + list[1] + list[2] + list[3] + list[4]);

Результат - 106, но я понятия не имею, как это получилось. Я думал, что это 10. Кто-нибудь может мне с этим помочь?

Благодарность!

-3
Aaron Ahrens 17 Окт 2015 в 00:21

2 ответа

Лучший ответ

В Java знайте, что 'n' != n. Это означает, что числовое значение char не равно самому char. Числовое значение char - это его значение Unicode. Цифры '0' - '9' находятся в кодовых точках Unicode 48-57 соответственно. Цифра n находится в кодовой точке n + 48.

Вы не инициализировали первый char массива, list[0], поэтому он имеет начальное значение нулевого символа, точки Unicode 0.

2 символа = 48 * 2, плюс 0 + 1 + 2 + 3 + 4 = 96 + 10 = 106.

4
rgettman 16 Окт 2015 в 22:17

Ключ в том, что значения в list [1] и list [2] являются символьными литералами '1' и '2', которые закодированы как их значения ASCII, 49 и 50 соответственно. Два других - это символы со значениями ASCII 3 и 4 (оба являются управляющими символами).

В Java, когда вы добавляете числа, отличные от float, double или long, аргументы повышаются до int. Следовательно, добавление char '1' + '2' + 3 + 4 аналогично добавлению int 49 + 50 + 3 + 4, что является int 106.

Если вы приведете результат сложения как символ

System.out.println((char) (list[0] + list[1] + list[2] + list[3] + list[4]));

Результатом будет j, символ ASCII для 106.

1
dconman 16 Окт 2015 в 21:34