Как происходит расширение типа в случае положительных и отрицательных сторон в Java? - PullRequest
0 голосов
/ 13 сентября 2018

Есть ли разница между тем, как происходит преобразование типов в случае положительных и отрицательных чисел?

Например, если у нас есть

short a = 100;

и положить его на

int b = a;

если мы изменим «100» на «-100», будет ли это иметь значение? Я пытался найти компиляцию в IDEA, но не нашел разницы, но у меня есть эти вопросы от моего наставника.

1 Ответ

0 голосов
/ 13 сентября 2018

Отказ от ответственности : Так как это домашнее задание, то, что я здесь говорю, может не быть "ожидаемым" ответом.

Здесь есть два преобразования.Первый - это сужающее примитивное преобразование из int (литерал 100 оценивается в значение типа int) в short.Второе преобразование представляет собой расширяющееся примитивное преобразование из short в int.

Второе преобразование никогда не потеряет информацию в соответствии с JLS §5.1.2 :

Расширяющее примитивное преобразование не теряет информацию об общей величине числового значения в следующих случаях, когда числовое значение сохраняется точно:

  • от целочисленного типа к другому целочисленному типу

  • от байта, короткого символа или символа до типа с плавающей запятой

  • от int до удвоения

  • от float до double в выражении строгого выражения (§15.4)

Первое преобразование выполненотаким образом, согласно JLS §5.1.3

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

И -100, и 100 могут быть представлены с short, диапазон которого равен -65536 ... 65535, поэтому здесь также не теряется информация.

Короче говоря, не имеет значения, используете ли вы 100 или -100, результат будетb будет хранить значение 100 или -100 соответственно.

...