Преобразование символов в Ints в Java - PullRequest
1 голос
/ 19 ноября 2010

Система: Windows Vista 32-bit, Java 6.0.2

У меня есть несколько вопросов о преобразовании символов в целые.Я запускаю приведенный ниже код, оставляя myInt со значением 4:

  char myChar = '4';
  int myInt = myChar - '0';

Теперь, является ли это преобразование тем, что делает Java автоматически?Было ли значение ascii '0' вычтено из ascii '4', а затем приведено к int за кадром?Это сбивает меня с толку, потому что, когда я пытаюсь выполнить обратную операцию, я должен на самом деле привести результат в виде символа:

  int anotherInt = 5;
  char newChar = anotherInt + '0'; //gives error

  char newChar = (char)(anotherInt + '0'); //works fine

Это происходит потому, что Java автоматически приводит (anotherInt + '0') кint, как в первом примере?Спасибо.

Ответы [ 2 ]

22 голосов
/ 19 ноября 2010

Преобразование из char (2-байтовый тип) в int (4-байтовый тип) неявно в Java, потому что это расширяющее преобразование - все возможные значения, которые вы можете сохранить в char Вы также можете хранить в int. Обратное преобразование не является неявным, потому что это сужающее преобразование - оно может потерять информацию (два старших байта int отбрасываются). Вы всегда должны явно приводить в таких сценариях, как способ сказать компилятору: «Да, я знаю, что это может потерять информацию, но я все еще хочу это сделать».

2 голосов
/ 19 ноября 2010

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

Однако во втором случае требуется явное приведение, когда существует вероятность потери информации, поскольку символ меньше целого.

...