Сравнение целочисленного значения

Если вы посмотрите на этот URL: http://java.sun.com/developer/technicalArticle/J2SE/Desktop/javadb/

эта часть схемы может быть Вы ищете.

 ID          INTEGER NOT NULL 
                PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
                (START WITH 1, INCREMENT BY 1),

26
задан towi 13 May 2013 в 10:12
поделиться

5 ответов

Целые числа автоматически распаковываются, поэтому вы можете просто сделать

if (count > 0) {
    .... 
}
25
ответ дан 28 November 2019 в 06:13
поделиться

Чтобы выяснить, больше ли Integer 0, вы можете:

  • проверить, возвращает ли compareTo (O) положительное число:

     если (count.compareTo (0)> 0)
     ...
    

    Но это выглядит довольно глупо, не так ли? Лучше просто ...

  • использовать автобокс 1 :

     if (count> 0)
     ....
    

    Это эквивалентно:

     if (count.intValue ()> 0)
     ...
    

    Важно отметить, что « == » вычисляется следующим образом, с распакованным операндом Integer , а не с операндом int в коробке. В противном случае count == 0 вернет false, если count был инициализирован как new Integer (0) (поскольку " == ]" проверяет для ссылочного равенства).

1 Технически, в первом примере используется автобоксинг (до Java 1.5 вы не могли передавать int в compareTo ), а во втором примере используется распаковка . Комбинированную функцию часто для краткости называют просто «автобоксингом», которая затем часто расширяется до вызова обоих типов преобразований «автобоксинг». Прошу прощения за неаккуратное использование терминологии.

30
ответ дан 28 November 2019 в 06:13
поделиться

Лучше избегать ненужного автобокса по двум причинам.

Во-первых, это немного медленнее, чем int , поскольку вы (иногда) создаете дополнительный объект;

void doSomethingWith(Integer integerObject){ ...
  int i = 1000;
  doSomethingWith(i);//gets compiled into doSomethingWith(Integer.valueOf(i));

Более серьезная проблема заключается в том, что скрытое автобоксирование может скрывать исключения:

void doSomethingWith (Integer count){
  if (count>0)  // gets compiled into count.intValue()>0

Вызов этого метода с null вызовет исключение NullPointerException .

Разделение между примитивами и объектами-оболочками в java всегда описывалось как кладж для скорости. Автобоксинг почти скрывает это, но не совсем - проще просто отслеживать тип. Итак, если у вас есть объект типа Integer, вы можете просто вызвать compare () или intValue () , и если у вас есть примитив, просто проверьте значение напрямую.

13
ответ дан 28 November 2019 в 06:13
поделиться

Вы также можете использовать equals:

 Integer a = 0;

 if (a.equals(0)) {
     // a == 0
 }

, что эквивалентно:

 if (a.intValue() == 0) {
     // a == 0
 }

, а также:

 if (a == 0) {

 }

(компилятор Java автоматически добавляет intValue ())

Обратите внимание, что автобоксинг / автоунбоксинг может привести к значительным накладным расходам (особенно внутри циклов).

13
ответ дан 28 November 2019 в 06:13
поделиться

Хотя вы, безусловно, можете использовать метод compareTo в экземпляре Integer, он не понятен при чтении кода, поэтому вам, вероятно, следует избегать этого.

Java позволяет вы можете использовать автобоксинг (см. http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html ) для прямого сравнения с int, поэтому вы можете:

if (count > 0) { }

И Integer экземпляр count автоматически преобразуется в int для сравнения.

Если у вас возникли проблемы с пониманием этого, проверьте ссылку выше, или представьте, что это делается так:

if (count.intValue() > 0) { }
3
ответ дан 28 November 2019 в 06:13
поделиться
Другие вопросы по тегам:

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