поэтому я понимаю, что в java, что значение считается целочисленным, когда оно добавлено.
Не обязательно. Например, если вы добавляете long
s.
Однако здесь я уже склоняюсь к переменным x и y, и это все еще дает мне сообщение об ошибке, которое не может преобразовать из int в short.
Это потому, что вы добавляете значения до их добавления; +
по-прежнему int
. (На самом деле, (short)x
является не-оп; x
является ужеshort
.)
Правильный способ написать что:
short z = (short)(x + y);
The short
с получить звание int
с, суммируются , а затем мы возвращаем результат до short
.
Re ваш комментарий:
(я) не уверен, почему первый кастинг х и у в короткий и положить их в скобки не приведет к коротким + короткое дополнение
Потому что Java не имеетshort + short
дополнение. Маленький размер это делает добавление на это int
, потому что the first thing в «добавка» операторы (+
и -
) делают это binary numeric promotion:
Если какой-либо из операндов имеет ссылочного типа, он подвергается распаковки преобразования (§5.1.8).
Widening примитивного преобразования (§5.1.2) применяются для преобразования любого или оба операнда, как указано по следующим правилам:
Если один из операндов имеют типа double
, другой преобразуется в double
,
В противном случае, если один из операндов имеет тип float , the other is converted to
float`.
В противном случае, если один из операндов имеет тип long
, другой преобразовано в long
.
В противном случае оба операнда преобразуются в тип int
.
Так short + short
(или char + char
или byte + byte
) становится int + int
с получением int
. Только целочисленные дополнения Java имеет int + int => int
и long + long => long
.
Как вы сказали, '+' дает 'int'. – aioobe
thats поощрение типа в java.http: //www.java2s.com/Book/Java/0020__Language-Basics/The_Type_Promotion_Rules.htm – cafebabe1991