В чем разница между длинным и длинным в коде 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 это класс, поэтому следует использовать вместо него.

Другие вопросы по тегам