Установка краткого значения Java - PullRequest
92 голосов
/ 19 февраля 2010

Я пишу небольшой код в J2ME. У меня есть класс с методом setTableId(Short tableId). Теперь, когда я пытаюсь написать setTableId(100), это дает ошибку времени компиляции. Как я могу установить короткое значение без объявления другой короткой переменной?

При установке значения Long я могу использовать setLongValue(100L), и это работает. Итак, что здесь означает L и какой символ имеет значение Short?

Спасибо

Ответы [ 4 ]

146 голосов
/ 19 февраля 2010

В Java целочисленные литералы имеют тип int, если они не имеют суффикс с буквой «L» или «l» (заглавная буква L предпочтительна, поскольку строчную букву L трудно отличить от числа 1) Если с суффиксом L, литералы имеют тип long.

Суффикс не имеет никакого специального имени в Спецификации языка Java. Также нет суффиксов для любых других целочисленных типов. Поэтому, если вам нужен короткий или байтовый литерал, они должны быть преобразованы:

byte foo = (byte)0;
short bar = (short)0;

В setLongValue (100L) необязательно включать суффикс L, потому что в этом случае литерал int автоматически расширяется на long. Это называется расширяющимся примитивным преобразованием в спецификации языка Java.

30 голосов
/ 19 февраля 2010

Нет такой вещи как байт или короткий литерал.Вам необходимо разыграть на короткую позицию, используя (short)100

8 голосов
/ 19 февраля 2010

Вы можете использовать setTableId((short)100).Я думаю, что это было изменено в Java 5, так что числовые литералы, назначенные байту или короткому значению и в пределах диапазона для цели, автоматически предполагаются как целевой тип.Эти последние J2ME JVM созданы на основе Java 4.

0 голосов
/ 13 марта 2019

Как правило, вы можете просто привести переменную в short.

Вы также можете получить такие проблемы, которые могут сбивать с толку. Это связано с тем, что оператор + переводит их в int

enter image description here

Приведение элементов не поможет:

enter image description here

Вам нужно привести выражение:

enter image description here

...