2010-12-19 2 views
11
long a = 1111; 
Long b = 1113; 

if(a == b) 
{ 
    System.out.println("Equals"); 
}else{ 
    System.out.println("not equals"); 
} 

Приведенный выше код печатает «равные» в консоли, что является неправильным ответом. мои вопросы - как сравнить длинное значение переменной, равное значению Long variable. пожалуйста, переиграйте меня как можно скорее.Как сравнить длительное значение, равное длинному значению

Thankh вы

+7

Этот код не компилируется. Вторая строка требует длинного значения, и вы предоставляете int. Он должен быть длинным b = 1113L; Тем не менее, он печатает правильный ответ. –

ответ

26

Сначала ваш код не скомпилирован. Строка Длинная b = 1113;

неправ. Вы должны сказать

Long b = 1113L; 

Во-вторых, если я исправил эту проблему компиляции, то код напечатал «не равно».

9

Он работает, как ожидалось,

Попробуйте проверить IdeOneDemo

public static void main(String[] args) { 
     long a = 1111; 
     Long b = 1113l; 

     if (a == b) { 
      System.out.println("Equals"); 
     } else { 
      System.out.println("not equals"); 
     } 
    } 

отпечатки

not equals для меня

Использование compareTo() для сравнения Long, == wil не работает во всех случаях, если значение кэшировано

+1

Вы правы, но в данном случае это не имеет значения. Autoboxing выполняет свою работу. – AlexR

+2

@AlexR Auto * un * бокс. Если он autoboxed '1234L' и' Long.valueOf (1234L) '* может * быть не равным. Как всегда со ссылками, если 'b' является' null', он взрывается. (О, и суффикс верхнего регистра-L предпочтителен, так как его трудно ошибочно принять за 1.) –

+2

Длины не могут сравниться с ==.Теория утверждает, что вам нужно использовать простой трюк, например, вычитать один из другого и видеть соответствующую разницу. – hephestos

7
long a = 1111; 
Long b = new Long(1113); 

System.out.println(b.equals(a) ? "equal" : "different"); 
System.out.println((long) b == a ? "equal" : "different"); 
3

С одной стороны, это длинный объект, а с другой стороны - примитивный тип. Для того, чтобы сравнить их можно получить примитивный тип из длинного типа:

public static void main(String[] args) { 
    long a = 1111; 
    Long b = 1113; 

    if ((b!=null)&& 
     (a == b.longValue())) 
    { 
     System.out.println("Equals"); 
    } 
    else 
    { 
     System.out.println("not equals"); 
    } 
} 
0

Поскольку Java 7 вы можете использовать java.util.Objects.equals(Object a, Object b):

Эти утилиты включают нуль-безопасные или нулевые толерантных методы

Long id1 = null; 
Long id2 = 0l; 
Objects.equals(id1, id2)); 
1

поделюсь, что Как это сделать, так как Java 7 -

Long first = 12345L, second = 123L; 
System.out.println(first.equals(second)); 

выход возвращается: ложный

и второй пример матча -

Long first = 12345L, second = 12345L; 
System.out.println(first.equals(second)); 

выхода вернулся: истинный

Таким образом, я считаю, в равном метод сравнения стоимости объекта, Надеется, что это помогает вы, спасибо.

0
public static void main(String[] args) { 
     long a = 1111; 
     Long b = 1113L; 
     if(a == b.longValue()) 
    { 
     System.out.println("Equals"); 
    }else{ 
     System.out.println("not equals"); 
    } 
    } 

or: 

    public static void main(String[] args) { 
     long a = 1111; 
     Long b = 1113L; 
     if(a == b) 
    { 
     System.out.println("Equals"); 
    }else{ 
     System.out.println("not equals"); 
    } 
    } 
Смежные вопросы