В чем разница между длинным и длинным в коде Android?
Я пытался написать AsycTask в приложении для Android. Там я наткнулся на типы данных Integer и Long, и я не уверен, что они есть. Я пытался с помощью long
на месте Long
, но я получил ошибку в высказывании затмения
'Syntax error on token "long", Dimensions expected after this token'.
7 ответов
Лонг это класс. длинный примитив. Это означает, что Long может быть нулевым, а long - нет. Long может пойти куда угодно, где берется Object, Long не может (поскольку это не класс, он не является производным от Object).
Java обычно автоматически переводит Long в long (и наоборот), но не для пустых значений (поскольку long не может быть нулем), и вам нужно использовать версию Long, когда вам нужно передать класс (например, в общей декларации).
Q: В чем разница между "длинным" и "длинным"?
A: Первый является "примитивным"; последний является "объектом".
Вот отличная статья, предлагающая, почему вы можете предпочесть "Long" ("обертка объекта"):
Примитивные типы, считающиеся вредными
PS:
Использование обертки объекта "Long" имеет много преимуществ (включая "нулевые" значения), и много преимуществ использования примитива "long" (включая краткость и эффективность).
"Бокс" и "Распаковка" - это механизм переключения между одним и другим. Еще одна хорошая ссылка:
Integer и Long являются объектными обертками для типов данных int и long.
AsyncTask использует обобщенные значения для определения значений, а обобщенные значения принимают только объекты в качестве параметров.
Лонг - это объектная форма лонг...
Вы должны использовать long и int, за исключением случаев, когда вам нужно использовать методы, унаследованные от Object, такие как хэш-код. Методы java.util.collections обычно используют коробочную (Object-wrapped) версии, потому что они должны работать для любого Object
long - также передача по значению, тогда как Long - передача по ссылке, как и все не примитивные типы Java.
Кроме того, Long может быть нулевым
long это примитивный тип данных, тогда как Long это объект.
AsyncTask может принимать в качестве параметров только объекты.
Вы также должны осознавать пространство, которое занимают оба.
Long
наследуется от другого класса, а также содержит другие значения внутри:
public final class Long extends Number implements Comparable<Long> {
@Native public static final long MIN_VALUE = 0x8000000000000000L;
@Native public static final long MAX_VALUE = 0x7fffffffffffffffL;
}
long
это просто один примитив, который занимает 8 байт пространства.
Это может стать очень актуальным, когда вы имеете дело с большим количеством данных, хранящихся в памяти или передаваемых по сети.
AsyncTask использует общие параметры, которые требуют параметров ссылочного типа. long
является примитивным типом, поэтому не допускается. С другой стороны Long
это класс, поэтому следует использовать вместо него.