Если вы посмотрите на этот 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),
Целые числа автоматически распаковываются, поэтому вы можете просто сделать
if (count > 0) {
....
}
Чтобы выяснить, больше ли 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
), а во втором примере используется распаковка . Комбинированную функцию часто для краткости называют просто «автобоксингом», которая затем часто расширяется до вызова обоих типов преобразований «автобоксинг». Прошу прощения за неаккуратное использование терминологии.
Лучше избегать ненужного автобокса по двум причинам.
Во-первых, это немного медленнее, чем 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 ()
, и если у вас есть примитив, просто проверьте значение напрямую.
Вы также можете использовать equals:
Integer a = 0;
if (a.equals(0)) {
// a == 0
}
, что эквивалентно:
if (a.intValue() == 0) {
// a == 0
}
, а также:
if (a == 0) {
}
(компилятор Java автоматически добавляет intValue ())
Обратите внимание, что автобоксинг / автоунбоксинг может привести к значительным накладным расходам (особенно внутри циклов).
Хотя вы, безусловно, можете использовать метод 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) { }