Подтвердить что ты не робот

Приращение Char Тип в Java

Во время практики Java я случайно придумал это:

class test
{
    public static void main(String arg[])
    {
        char x='A';
        x=x+1;
        System.out.println(x);
    }
}

Я думал, что это вызовет ошибку, потому что мы не можем добавить числовое значение 1 к букве A в математике, но следующая программа работает правильно и печатает

B 

Как это возможно?

4b9b3361

Ответ 1

В Java char является числовым. Когда вы добавляете 1 в char, вы переходите к следующей кодовой строке Unicode. В случае 'A' следующая кодовая точка 'B':

char x='A';
x+=1;
System.out.println(x);

Обратите внимание: вы не можете использовать x=x+1, потому что это вызывает неявное сужение преобразования. Вместо этого вам нужно использовать x++ или x+=1.

Ответ 2

A char на самом деле отображается на int, посмотрите Таблица Ascii.

Например: капитал A соответствует десятичному числу 65. Когда вы добавляете 1 к этому char, вы в основном увеличиваете десятичное число на 1. Таким образом, число становится равным 66, что соответствует капиталу B.

Ответ 3

char - это числовой тип (длиной 2 байта) и также является единственным неподписанным числовым примитивным типом в Java.

Вы также можете сделать:

int foo = 'A';

Что особенного здесь, так это то, что вы инициализируете char символьной константой вместо числа. Что особенно важно, так это его строковое представление, как вы могли бы видеть. Вы можете использовать Character.digit(c, 10) для получения его числового значения (как int, так как 2 ^ 16 - 1 не представляется !).

Ответ 4

Это эквивалентная программа вашей программы:

public class Tester {
    public static void main(String args[]){
             char start='\u0041';
             char next='\u0041'+1;
             System.out.println(next);
    }
}

Но, как видите, next=start+1 не будет работать. Это способ обработки java.

Причиной может быть то, что мы можем случайно использовать start с целым числом 1, считая, что start является переменными int и использует это выражение. Поскольку java настолько строг в минимизации логических ошибок. Они спроектировали это так, как я думаю.

Но когда вы это сделаете, char next='\u0041'+1; ясно, что '\u0041' является символом, а 1 будет неявно преобразован в 2 байта. Это не может быть ошибкой программиста. Может быть, причина, по которой они позволили.

char - это 2 байта в java. char поддерживает символы unicode. Когда вы добавляете или вычитаете var char с целым числом смещения, в результате получается эквивалентный символ unicode в таблице Unicode. Поскольку B находится рядом с A, вы получили B.

Ответ 5

A char в Java - это просто целое число, поэтому он может увеличивать/уменьшать его. Каждый номер char имеет соответствующее значение, интерпретацию которого как символ, в силу таблицы преобразования: будь то кодировка ASCII или кодировка UTF-8 и т.д.

Подумайте об этом, все данные на компьютере - изображения, музыка, программы и т.д. - всего лишь цифры. Простой символ не является исключением, он кодируется или кодируется как число.

Ответ 6

char сохраняются как 2 байтовые значения юникода в Java. Поэтому, если char x = 'A', это означает, что A хранится в формате Unicode. И в формате Unicode каждый символ представлен как целое число. Поэтому, когда вы говорите x= x+1, он фактически увеличивает значение unicode для A, которое печатает B.

Ответ 7

вам нужно набрать результат после добавления с помощью круглых скобок, например:

x='A';
x = (char) (x+1);

иначе вы потеряете ошибку данных.

Ответ 8

Поскольку тип char эффективно работает как 16-разрядный беззнаковый int.

Таким образом, настройка char x='A' почти эквивалентна int x=65 Когда вы добавляете один; вы получаете 66; или ASCII 'B'.

Ответ 9

Каждый char имеет код символа. Компьютер видит символ как неподписанное число, поэтому вы можете увеличить его.