Разница между длинным и длинным? - PullRequest
2 голосов
/ 13 сентября 2011

Я выполняю 2-е упражнение на примере Android с помощью приложения «Блокнот». У меня есть вопрос о разнице между Long и Long, который использовался для определения mRowId.

Упражнение здесь: http://developer.android.com/resources/tutorials/notepad/notepad-ex2.html

Ниже приведен фрагмент кода, с которым у меня возникли проблемы:

public class NoteEdit extends Activity {

private Long mRowId; 
private EditText mTitleText;
private EditText mBodyText; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.note_edit);
    setTitle(R.string.edit_note);

    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.body);
    Button confirmButton = (Button) findViewById(R.id.confirm);

    mRowId = null;

Когда я объявил mRowId с long, я получил ошибку, когда попытался установить для mRowId значение null, ошибка - «несоответствие типов». Но если я использую Long, ошибка исчезнет. Почему long не работает?

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

Long - это класс-оболочка для примитива long. Следовательно, Long является объектом; объекты могут быть null, примитивы не могут.

См. Документацию Long класса .

0 голосов
/ 14 сентября 2013

long - это примитивный тип, а Long - это тип long в штучной упаковке.После того, как функция автобокса выпущена в Java, примитив long может быть автоматически преобразован в Long, который является объектом.

Но иногда это также создает проблему.Например, приведенный ниже код ужасно медленный:

public static void main(String[] args)
{
    Long sum = 0L;
    for(long i=0; i < Integer.MAX_VAL; i++){
        sum+=i;
    }
}

Это потому, что программа непреднамеренно создала 2 ^ 31 объектов без необходимости из-за прописной буквы L в объявлении sum.

...