У чым розніца паміж даўжынёй і Лонг ў андроіды коды?

Я спрабаваў напісаць AsycTask ў АНДРОІД прыкладання. Там я наткнуўся на Integer і Long тыпаў дадзеных, і я не ўпэўнены, што яны ёсць. Я паспрабаваў з дапамогай доўгі замест Long , але я атрымаў паведамленне пра памылку ў зацьменні, кажучы

'Syntax error on token "long", Dimensions expected after this token'.
6
Вы можаце прачытаць пра Java Бокс/распакаванне, таму вы можаце не заўважыць розніцу да: docs.oracle.com/javase/tutorial/java/data/autoboxing.html
дададзена аўтар onit, крыніца

7 адказы

Доўгі клас. даўно з'яўляецца прымітыўным. Гэта азначае, што Доўгія можа быць пустым, дзе доўга не можа. Доўга можа пайсці куды-небудзь, які прымае аб'ект, доўга не можа (бо ён не з'яўляецца класам ён не з'яўляецца вытворным ад Object).

Java звычайна перакладае Доўгі у доўгім аўтаматычна (і наадварот), але не будзе для нулёў (так як доўга не можа быць нуля), і вы павінны выкарыстоўваць доўгую версію, калі вам трэба перадаць клас ( напрыклад, у агульнай дэкларацыі).

19
дададзена

Пытанне: У чым розніца паміж "доўгім" і "Long»?

A: Першая з іх з'яўляецца «прымітыўным»; апошняя з'яўляецца «аб'ектам».

Вось вялікі артыкул прадугледжвае, чаму вы можаце аддаць перавагу «Long» ( «аб'ект абгортку»):

Прымітыўныя Тыпы Прадуманыя Шкодны

PS:

Ёсць шмат пераваг ў выкарыстанні «Long» аб'ект абгорткі (у тым ліку «нулявых» значэнняў), а таксама шмат пераваг выкарыстання «доўгі» прымітыўнага (у той ліку лаканічнасці і эфектыўнасці).

«Бокс» і «Распакаванне» з'яўляецца механізмам для пераключэння паміж адным і іншым. Яшчэ адна добрая спасылка:

Using Boxing With Care

7
дададзена
Дзякуй за артыкул. Ён удакладніў шматлікія сумневы.
дададзена аўтар Prince Kumar, крыніца

Integer і Long з'яўляюцца аб'ектныя абгорткі на міжнар і доўгіх прымітыўных тыпаў дадзеных.

AsyncTask выкарыстоўвае джынэрыкі для вызначэння значэнняў, аднак і джынэрыкі прымае толькі аб'екты ў якасці параметраў.

1
дададзена

Лонг форма Аб'ект доўга ...

Вы павінны выкарыстоўваць доўгія і Int акрамя выпадкаў, калі вам неабходна выкарыстоўваць метады, атрыманыя ў спадчыну ад аб'екта, напрыклад, хэш-код. java.util.Collections метады звычайна выкарыстоўваюць у штучны ўпакоўцы (Object абгорнуты) версіі, таму што яны павінны працаваць для любога аб'екта

доўга і праходзіць па значэнні, тады як, Лонг прайсці па спасылцы значэнне, як і ўсе, ня прымітыўных тыпаў Java

Акрамя таго, Лонг можа быць пустым

0
дададзена

Вы таксама павінны быць дасведчаныя аб прасторы, што абодва яны прымаюць.

Long inherits from another class and also contains other values inside:

public final class Long extends Number implements Comparable {
    @Native public static final long MIN_VALUE = 0x8000000000000000L;
    @Native public static final long MAX_VALUE = 0x7fffffffffffffffL;
}

long is just a single primitive that takes up 8 bytes of space.

Гэта можа стаць вельмі актуальным, калі вы маеце справу з вялікай колькасцю дадзеных, якія захоўваюцца ў памяці або перасылаюцца па сетцы.

0
дададзена

AsyncTask uses generic parameters which require reference type parameters. long is a primitive type so is not allowed. On the other hand Long is a class so should be used instead.

0
дададзена

доўгі прымітыўны тып дадзеных, у той час як Лонг з'яўляецца аб'ектам.
AsyncTask можа прымаць толькі як параметры аб'ектаў.

0
дададзена