Почему я получаю ошибку времени компиляции в фактическом и формальном аргументе в java? - PullRequest
0 голосов
/ 14 апреля 2020

Я получаю ошибку времени компиляции, когда я вызываю метод и передаю фактический аргумент как short тип данных в формальный аргумент byte datatype ...

display((short)(20));

static void display(byte b1){}

Но когда я передаю фактический аргумент с байт тип данных формальному аргументу short тип данных, тогда программа успешно компилируется ..

display((byte)(20));

static void display(short b1){}

Ответы [ 3 ]

1 голос
/ 14 апреля 2020

Вы можете поместить пинту воды в литровый кувшин; Вы не можете поместить литр воды в кувшин для пинты.

short и byte - это разные типы данных. Диапазон short составляет -32768..32767; диапазон byte составляет -128..127. Все, что умещается в byte, также умещается в short; но не все, что умещается в short, может уместиться в байт.

Из-за этого вы можете передать byte методу, ожидающему short (используя неявный расширяющий примитив преобразование ), но вы не можете передать short методу, ожидающему byte.

1 голос
/ 14 апреля 2020

то, что вы сделали, это все равно, что положить 2 литра воды в bottle, который может содержать всего 1 литр, поэтому тип данных byte , который, как вы предполагали, в вашем методе, будет иметь диапазон чисел, равный меньше диапазона short тип данных. байт может содержать значение, которое может быть представлено 8 битами, но short может представлять значение 16 бит.

1 голос
/ 14 апреля 2020

Это потому, что short - это «больший» тип данных, чем байт. Байт составляет 8 бит, а короткий - 16 бит. Когда вы пытаетесь передать целочисленный литерал, явно приведенный к короткому, методу, принимающему байт, Java знает, что преобразование с потерями может иметь место, и отображает ошибку во время компиляции.

Так как типы данных байта меньше коротких типов данных, числовое продвижение c происходит автоматически, а байт автоматически продвигается к короткому в вашем втором примере.

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