powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Равенство двух Long
14 сообщений из 14, страница 1 из 1
Равенство двух Long
    #39593614
Timein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер

Хотел уточнить, а то сомнения бродят в неокрепшем уме. Есть некоторый код:
Код: java
1.
2.
3.
4.
Long value = getValue();
if(value==1L){
     // code
}



Насколько правильно так сравнивать значения? Или лучше использовать equals?
И еще, у Integer есть пулл, есть ли он у Long и других классов-оболочек?
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593633
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinНасколько правильно так сравнивать значения?
Как я понимаю, Unboxing будет, но полного и исчерпывающего описания, когда происходит boxing, когда unboxing я не нашел.

https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
TimeinИли лучше использовать equals?

Лично я бы использовал longValue(), тот же unboxing только явный

equals выглядит худшим вариантом, т.к. потребует создание еще одного экземпляра объекта - а оно надо?

чисто моя точка зрения
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593744
leader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так правильнее

Код: java
1.
2.
3.
4.
Long value = getValue();
if(value != null && value==1L){
     // code
}
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593747
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaderТак правильнее

Код: java
1.
2.
3.
4.
Long value = getValue();
if(value != null && value==1L){
     // code
}


А чем правильнее-то?
Разве в случае, когда value есть null выполняется условие value==1L?
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593756
leader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008А чем правильнее-то?
Разве в случае, когда value есть null выполняется условие value==1L?

Если value равен null, тогда сравнение value==1L даст NullPointerException
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593769
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaderЕсли value равен null, тогда сравнение value==1L даст NullPointerException
Это точно. Указателей нет, а NPE повсюду!
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593799
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008leaderТак правильнее

Код: java
1.
2.
3.
4.
Long value = getValue();
if(value != null && value==1L){
     // code
}



А чем правильнее-то?
Разве в случае, когда value есть null выполняется условие value==1L?

При сравнении со скаляром - сначала выполняется анбоксинг, который выкинет npe.
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593822
J.Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TimeinДобрый вечер
..
И еще, у Integer есть пулл, есть ли он у Long и других классов-оболочек?
Есть у Byte, Short, Long и Character. Ну и у Boolean :) У Float и Double соответственно нет.
Это очень просто выясняется просмотром кишков исходников JDK
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593852
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaderSQL2008А чем правильнее-то?
Разве в случае, когда value есть null выполняется условие value==1L?

Если value равен null, тогда сравнение value==1L даст NullPointerException
Блин! Как все сложно... Не знал об этом.
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593877
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timein,
Код: java
1.
2.
3.
if(java.util.Objects.equals(1L, value)){
    // code
}

а под капотом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package java.util;

public final class Objects {
    ...
    public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }
    ...
}
...
Рейтинг: 0 / 0
Равенство двух Long
    #39593900
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanif(java.util.Objects.equals(1L, value)){
// code
}

Чем мне не нравятся ООП-языки. что фиг поймешь, какой реально код будет сгенерирован и выполнятся
т.к. теоретически. тут должен быть Boxing в момент выполнения, а нафиг он нужен?

а создавать код вида
Usmanpublic final static one = Long.valueOf( 1L );
....
if(java.util.Objects.equals(one, value)){
// code
}

Как-то уже длинно получается (((( понятно, что с константами от -127 до 127 потери времени будут не сильно большие, но если нужно сравнение с произвольным числом... тут уже из-за boxing'а можем и heap дергать (((

IMHO
...
Рейтинг: 0 / 0
Равенство двух Long
    #39594000
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЧем мне не нравятся ООП-языки. что фиг поймешь, какой реально код будет сгенерирован и выполнятсякод привел (см. выше) - стандартный метод из java.util.*
Leonid Kudryavtsevт.к. теоретически. тут должен быть Boxing в момент выполнения, а нафиг он нужен?в данном случае boxing будет, т.к. метод считается универсальным... никто не мешает разработчику воспользоваться перегрузкой методов (:
Leonid KudryavtsevUsmanpublic final static one = Long.valueOf( 1L );откуда это взялось?Leonid KudryavtsevКак-то уже длинно получается ((((можно вынести в секцию import (это для наглядности, чтоб понять откуда этот Objects взялся)
Leonid KudryavtsevКак-то уже длинно получается (((( понятно, что с константами от -127 до 127 потери времени будут не сильно большие, но если нужно сравнение с произвольным числом... тут уже из-за boxing'а можем и heap дергать (((а эта проблема решается при помощи опции -XX:AutoBoxCacheMax
...
Рейтинг: 0 / 0
Равенство двух Long
    #39594053
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman.....а эта проблема решается при помощи опции [b]-XX:AutoBoxCacheMax[/b
мне кажется глагол "решается" применен не правильно, правильно сказать "затыкается". Т.к. -XX:AutoBoxCacheMax, это явно затычка, а не решение. IMHO

Но тут уже на вкус и цвет...

Я бы просто сделал longValue() и сравнил. А сравнивать long'и через equals на мой взгляд извращение.

Да и вообще, если взять нормальные коллекции для примитивных типов (которые на порядок быстрее и компактнее, чем стандартные), то смысл инкапсулировать атомарных типов в объекты почти пропадает. Т.ч. даром этот боксинг и анбоксинг не нужен. IMHO & AFAIK
...
Рейтинг: 0 / 0
Равенство двух Long
    #39594283
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevнормальные коллекции для примитивных типов (которые на порядок быстрее и компактнее, чем стандартные)нашел ArrayIntList (из commons-primitives) - это фактически обертка над массивом.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Равенство двух Long
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]