Вы используете объект, содержащий ссылку нулевого значения. Таким образом, он дает пустое исключение. В примере строковое значение равно null, и при проверке его длины произошло исключение.
Пример:
string value = null;
if (value.Length == 0) // <-- Causes exception
{
Console.WriteLine(value); // <-- Never reached
}
Ошибка исключения:
Необработанное исключение:
System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта. в Program.Main ()
blockquote>
'a' + 10
является выражением константы времени компиляции со значением 'k'
, которое может инициализировать переменную типа char
. Это то же самое, что и возможность присваивать переменной byte
целым числом в [-128, 127]. A byte
в диапазоне [128, 255] может быть более раздражающим.
Константа имеет другой тип (я знаю, что спецификация говорит, что 10
должен быть int, но компилятор не видит этого таким образом).
В char c = 'a' + 10
, 10 фактически считается постоянной переменной типа char (поэтому ее можно добавить в a). Поэтому char c = char + char
работает.
В int i = 10;
char c = 'a' + i;
Вы добавляете символ в целое число (целое число может быть намного больше, чем char, поэтому он выбирает больший тип данных [int
], чтобы результат aka: 'a' + i = int + int
). Таким образом, результатом добавления является целое число, которое не может вписаться в char c
.
Если вы явно наложили i
на символ (например: char c = 'a' + (char)i;
), он может работать, или если вы сделал обратное (например: int c = (int)'a' + i;
), это сработает.
Это потому, что компилятор может проверить, что он ('a' + 10
) находится в пределах символа, тогда как он не может (в общем) проверить, что 'a' + <an integer>
находится в пределах.
char на самом деле представляет собой неподписанное 16-разрядное целое число с диапазоном 0-65535. Таким образом, вы можете назначить любой целочисленный литерал в этом диапазоне для символа, например, «char c = 96», в результате чего «c» удерживает символ «a». Вы можете распечатать результат с помощью System.out.println (c).
Для константного выражения в правой части «char c = 'a' + 10», «a» продвигается к int сначала из-за правил рассылки числовой рекламы Java и целочисленного значения 96. После добавления 10 к нему мы получаем буквальное целое число 106, которое может быть присвоено символу.
Правая часть «char c = 'a' + i» не является константным выражением, и для правила присваивания результата выражения требуется явное преобразование из int в char, т. е. «char c = (char) ('a' + i) ".