В чем разница х = х + 3 и х + = 3? Почему один нуждается в приведении типа, а другой нет? - PullRequest
8 голосов
/ 27 июля 2011

Вопрос:

char x = 'a'; 
x += 3; // ok  
x = x + 3; // compile time error

1 Ответ

29 голосов
/ 27 июля 2011

Поскольку x += 3 эквивалентно x = (char)(x+3), в то время как x + 3 по умолчанию является операцией int, присвойте int для char, который должен быть приведен.

Из JLS specification : 15.26.2,

Составное выражение присваивания в форме E1 op = E2 эквивалентно E1 = (T) ((E1)op (E2)), где T - это тип E1, за исключением того, что E1 оценивается только один раз.Обратите внимание, что подразумеваемое приведение к типу T может быть либо преобразованием идентичности (? .1.1), либо преобразованием сужающего примитива (? .1.3).

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