Почему 128 ==, 128 лжи, но 127 == 127 верна при сравнении Целочисленных оберток в Java?

Используйте DecimalFormat.

159
задан Steve Chambers 11 September 2018 в 14:50
поделиться

3 ответа

Если вы хотите создать ссылку только с фрагментом, вам нужно немного «обмануть» функцию url. Поскольку он добавит базовый путь ко всем внутренним URL-адресам, '' станет http://example.com .

Вам нужно установить для внешнего параметра значение true:

l('link', '',  array('fragment' => 'namedanchor', 'external' => TRUE));

Это даст желаемый

<a href='#namedanchor'>link</a>

Альтернативный вариант, который вы можете указать полный URL, как предлагает Джереми.

equals (b3) выведет истину для всех логически равных значений b2, b3.

Обратите внимание, что кэш Integer не используется для повышения производительности, а скорее для соответствия JLS , раздел 5.1.7 ; идентификатор объекта должен быть указан для значений от -128 до 127 включительно.

Integer # valueOf (int) также документирует это поведение:

этот метод, вероятно, даст значительно лучшую пространственную и временную производительность за счет кэширования часто запрашиваемых значений . Этот метод всегда будет кэшировать значения в диапазоне от -128 до 127 включительно и может кэшировать другие значения за пределами этого диапазона.

207
ответ дан 23 November 2019 в 21:37
поделиться

Кеши автобокса от -128 до 127. Это указано в JLS ( 5.1.7 ).

Если упаковываемое значение p - истина, ложь, байт, символ в диапазоне от \ u0000 до \ u007f, либо int или короткое число от -128 до 127, тогда пусть r1 и r2 будут результатами любых двух преобразований упаковки. из п. Всегда бывает так, что r1 == r2.

Простое правило, которое следует помнить при работе с объектами: используйте .equals , если вы хотите проверить, равны ли два объекта, используйте == , если вы хотите узнать, указывают ли они на один и тот же экземпляр.

22
ответ дан 23 November 2019 в 21:37
поделиться

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

Однако, поскольку вы используете целочисленные объекты, оператор == имеет другое значение.

В контексте объектов == проверяет, ссылаются ли переменные на одну и ту же ссылку на объект.

Чтобы сравнить значения объектов, вы должны использовать метод equals () Например,

 b2.equals(b1)

, который укажет, меньше ли b2, чем b1, больше или равно (подробности см. В API)

8
ответ дан 23 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: