liczba całkowita jest klasą, int jest typem prymitywnym
Anycorn
24
Możesz to zrobić z Integer n = 9;powodu autoboxowania (chyba że używasz bardzo starej wersji java)
Alderath
Odpowiedzi:
320
intjest prymitywnym typem. Zmienne typu intprzechowują rzeczywistą wartość binarną liczby całkowitej, którą chcesz reprezentować. int.parseInt("1")nie ma sensu, bo intto nie klasa, a zatem nie ma żadnych metod.
Integerjest klasą, niczym nie różniącą się od innych w języku Java. Zmienne odwołań do Integermagazynu typu do obiektów, tak jak w przypadku każdego innego typu odwołania (obiektu). jest wywołaniem metody statycznej z klasy (zauważ, że ta metoda faktycznie zwraca an, a nie an ).IntegerInteger.parseInt("1")parseIntIntegerintInteger
Mówiąc ściślej, Integerjest to klasa z jednym polem typu int. Ta klasa jest używana tam, gdzie trzeba inttraktować jak każdy inny obiekt, na przykład w typach ogólnych lub sytuacjach, w których potrzebujesz zerowalności.
Zauważ, że każdy typ pierwotny w Javie ma równoważną klasę opakowania :
byte ma Byte
short ma Short
int ma Integer
long ma Long
boolean ma Boolean
char ma Character
float ma Float
double ma Double
Klasy opakowań dziedziczą po klasie Object, a prymityw nie. Można go zatem używać w kolekcjach z odniesieniem do obiektu lub z ogólnikami.
Od wersji java 5 mamy autoboxing, a konwersja między klasą pierwotną i klasą opakowania jest wykonywana automatycznie. Uważaj jednak, ponieważ może to wprowadzić subtelne błędy i problemy z wydajnością; wyraźne mówienie o konwersjach nigdy nie boli.
Chcę podkreślić, że uważam, że jest to idealna odpowiedź z dwóch powodów: 1 - zwięzły i dokładny, pamiętając o publiczności / pytającym 2 - Podaje kierunek dla dodatkowych szczegółów zamiast umieszczania wszystkiego w tekście odpowiedzi Nie wszystkie na pytania można odpowiedzieć dokładnie i zwięźle (niektóre wymagają znacznie więcej szczegółów i niuansów, aby były dokładne i kompletne), ale myślę, że wszystkie odpowiedzi powinny być tak proste i bezpośrednie.
DRich
11
Heh, myślę, że jest wręcz przeciwnie. „int jest typem pierwotnym” nic nie mówi, jeśli nie wiesz, co to jest typ pierwotny. (A jeśli tak, to już bardzo prawdopodobne, że znasz różnicę między liczbą całkowitą a liczbą całkowitą). Wysłanie czytelnika do dwóch linków oznaczonych jako „Link 1” i „Link 2” jest dość nieprzydatne, szczególnie w porównaniu do zwykłego cytowania odpowiednich sekcji.
Steve Bennett
7
Liczba całkowita jest właściwie tylko opakowaniem dla pierwotnego typu int. Pozwala ci korzystać ze wszystkich funkcji klasy Integer, aby ułatwić ci życie.
Jeśli jesteś nowy w Javie, powinieneś nauczyć się doceniać dokumentację Java. Na przykład wszystko, co chcesz wiedzieć o klasie całkowitej, jest szczegółowo udokumentowane.
Wynika to wprost z dokumentacji dla klasy Integer:
Klasa Integer otacza wartość typu pierwotnego int w obiekcie. Obiekt typu Integer zawiera pojedyncze pole, którego typem jest int.
To nieco mija się z celem. Na przykład, podobnie jak Integerklasa, może być przechowywany w kontenerach (w przeciwieństwie do typów pierwotnych).
Oliver Charlesworth
6
Zmienna int zawiera 32-bitową liczbę całkowitą ze znakiem. Liczba całkowita (z wielką literą I) zawiera odwołanie do obiektu typu Integer (klasy) lub do wartości null.
Java automatycznie rzuca między nimi; od Integer do int za każdym razem, gdy obiekt Integer występuje jako argument dla operatora int lub jest przypisany do zmiennej int lub wartość int jest przypisana do zmiennej Integer. Ten casting nazywa się boxing / unboxing.
Jeśli zmienna Integer odwołująca się do wartości null zostanie rozpakowana, jawnie lub niejawnie, generowany jest wyjątek NullPointerException.
(W powyższym tekście termin „zmienna” oznacza lokalną zmienną, pole lub parametr)
Integerodnosi się do typu opakowania w Javie, podczas gdy intjest typem pierwotnym. Wszystko oprócz prymitywnych typów danych w Javie jest implementowane tak, jak obiekty, które sugerują, że Java jest wysoce wykwalifikowanym, czysto obiektowym językiem programowania. Jeśli potrzebujesz, wszystkie typy operacji podstawowych są również dostępne jako typy opakowań w Javie. Typy pierwotne mogą przynieść pewne korzyści w zakresie wydajności, dlatego typy opakowań powinny być używane tylko wtedy, gdy jest to konieczne.
W twoim przykładzie jak poniżej.
Integer n =9;
stała 9jest automatycznie umieszczana w ramkach ( auto-boxingi unboxingpojawia się automatycznie od java 5początku) do, Integera zatem można użyć instrukcji w ten sposób, a także Integer n = new Integer(9). W rzeczywistości osiąga się to poprzez oświadczenieInteger.valueOf(9).intValue();
int jest typem pierwotnym, a nie obiektem. Oznacza to, że nie ma z nim żadnych metod. Liczba całkowita jest obiektem z metodami (takimi jak parseInt).
W nowszej wersji Java dostępna jest funkcja automatycznego boxowania (i rozpakowywania). Oznacza to, że kompilator wstawi Integer.valueOf (int) lub integer.intValue () w razie potrzeby. Oznacza to, że tak naprawdę można pisać
Liczba całkowita jest klasą opakowania / Obiektem, a int jest typem pierwotnym. Ta różnica odgrywa ogromną rolę, gdy chcesz przechowywać wartości int w kolekcji, ponieważ akceptują one tylko obiekty jako wartości (do jdk1.4). JDK5 i następne z powodu autoboxowania to zupełnie inna historia.
JDK5 + akceptuje również tylko obiekty; po prostu autoboxing pozwala kompilatorowi automatycznie dzwonić Integer.valueOf(i)lub Integer.intValue()dla ciebie. Collection<int>nadal nie będzie działać. Więc to nie jest zupełnie inna historia - to ta sama historia, z odrobiną skrótu.
yshavit
Zgoda. Przepraszam, moje sformułowanie może tego nie odzwierciedlać.
kosa
3
W Javie int jest prymitywnym typem danych, podczas gdy Integer jest klasą Helper, służy do konwersji jednego typu danych na inny.
intjest pierwotnym typem, który reprezentuje liczbę całkowitą. mając na uwadze, Integerże obiekt jest zawijany int. IntegerObiekt daje większą funkcjonalność, takich jak konwersja do hex, sznurka, itd.
Możesz także używać koncepcji OOP z Integer. Na przykład możesz użyć liczby całkowitej do generics (tj .).Collection<Integer>
Java używa typów pierwotnych (zwanych także typami prostymi), takich jak int lub double , aby przechowywać podstawowe typy danych obsługiwane przez język. Typy pierwotne , a nie obiekty, są używane dla tych ilości ze względu na wydajność . Użycie obiektów dla tych wartości spowodowałoby niedopuszczalne obciążenie nawet w najprostszych obliczeniach. Zatem typy pierwotne nie są częścią hierarchii obiektów i nie dziedziczą Object .
Pomimo korzyści związanych z wydajnością oferowanych przez typy pierwotne, zdarza się, że potrzebujesz reprezentacji obiektu. Na przykład nie można przekazać typu pierwotnego przez odwołanie do metody . Ponadto wiele standardowych struktur danych implementowanych przez Javę działa na obiektach, co oznacza, że
nie można używać tych (specyficznych dla obiektu) struktur danych do przechowywania typów pierwotnych . Aby poradzić sobie z tymi (i innymi) sytuacjami, Java udostępnia opakowania typów, które są klasami, które zawierają typ pierwotny w obiekcie.
Klasy opakowań odnoszą się bezpośrednio do
funkcji autokoksowania Javy . Opakowania typu to Double, Float, Long, Integer, Short, Byte, Character i Boolean . Klasy te oferują szeroki wachlarz metod, które pozwalają w pełni zintegrować prymitywne typy z hierarchią obiektów Java.
Aby zoptymalizować środowisko wykonawcze kodu Java, dodano intpierwotne typyfloat , w tym boolitp., Ale zawierają one klasy otoki, dzięki czemu w razie potrzeby można je konwertować i używać jako standardowego obiektu Java wraz z wieloma narzędziami, które są ich członkami funkcje (takie jak Integer.parseInt("1")).
intjest prymitywnym typem danych, podczas gdy Integerjest typem referencyjnym lub opakowaniowym (klasa) w Javie.
po java 1.5czym wprowadzimy koncepcję autoboxowania i rozpakowywania , możesz zainicjować oba intlub Integertak.
int a=9Integer a =9// both valid After Java 1.5.
dlaczego Integer.parseInt("1");ale nie int.parseInt("1");??
Integerto klasa zdefiniowana w jdkbibliotece i parseInt()metoda statyczna należy do Integerklasy
Tak, Integer.parseInt("1");jest to możliwe w Javie. ale intjest to typ pierwotny (załóżmy jak słowo kluczowe) w java. Tak więc, nie można wywołać parseInt()z int.
Integer n = 9;
powodu autoboxowania (chyba że używasz bardzo starej wersji java)Odpowiedzi:
int
jest prymitywnym typem. Zmienne typuint
przechowują rzeczywistą wartość binarną liczby całkowitej, którą chcesz reprezentować.int.parseInt("1")
nie ma sensu, boint
to nie klasa, a zatem nie ma żadnych metod.Integer
jest klasą, niczym nie różniącą się od innych w języku Java. Zmienne odwołań doInteger
magazynu typu do obiektów, tak jak w przypadku każdego innego typu odwołania (obiektu). jest wywołaniem metody statycznej z klasy (zauważ, że ta metoda faktycznie zwraca an, a nie an ).Integer
Integer.parseInt("1")
parseInt
Integer
int
Integer
Mówiąc ściślej,
Integer
jest to klasa z jednym polem typuint
. Ta klasa jest używana tam, gdzie trzebaint
traktować jak każdy inny obiekt, na przykład w typach ogólnych lub sytuacjach, w których potrzebujesz zerowalności.Zauważ, że każdy typ pierwotny w Javie ma równoważną klasę opakowania :
byte
maByte
short
maShort
int
maInteger
long
maLong
boolean
maBoolean
char
maCharacter
float
maFloat
double
maDouble
Klasy opakowań dziedziczą po klasie Object, a prymityw nie. Można go zatem używać w kolekcjach z odniesieniem do obiektu lub z ogólnikami.
Od wersji java 5 mamy autoboxing, a konwersja między klasą pierwotną i klasą opakowania jest wykonywana automatycznie. Uważaj jednak, ponieważ może to wprowadzić subtelne błędy i problemy z wydajnością; wyraźne mówienie o konwersjach nigdy nie boli.
źródło
C#
wszystkich typach danych mają „aliasy” iint.Parse()
mają sens (nawet jeśli tak naprawdę nie ma)C#
jest tutaj całkowicie nieistotne.Liczba całkowita jest klasą, a liczba int jest typem pierwotnym.
Czytaj dalej pod tymi linkami:
źródło
Liczba całkowita jest właściwie tylko opakowaniem dla pierwotnego typu int. Pozwala ci korzystać ze wszystkich funkcji klasy Integer, aby ułatwić ci życie.
Jeśli jesteś nowy w Javie, powinieneś nauczyć się doceniać dokumentację Java. Na przykład wszystko, co chcesz wiedzieć o klasie całkowitej, jest szczegółowo udokumentowane.
Wynika to wprost z dokumentacji dla klasy Integer:
Klasa Integer otacza wartość typu pierwotnego int w obiekcie. Obiekt typu Integer zawiera pojedyncze pole, którego typem jest int.
źródło
Integer
klasa, może być przechowywany w kontenerach (w przeciwieństwie do typów pierwotnych).Zmienna int zawiera 32-bitową liczbę całkowitą ze znakiem. Liczba całkowita (z wielką literą I) zawiera odwołanie do obiektu typu Integer (klasy) lub do wartości null.
Java automatycznie rzuca między nimi; od Integer do int za każdym razem, gdy obiekt Integer występuje jako argument dla operatora int lub jest przypisany do zmiennej int lub wartość int jest przypisana do zmiennej Integer. Ten casting nazywa się boxing / unboxing.
Jeśli zmienna Integer odwołująca się do wartości null zostanie rozpakowana, jawnie lub niejawnie, generowany jest wyjątek NullPointerException.
(W powyższym tekście termin „zmienna” oznacza lokalną zmienną, pole lub parametr)
źródło
Integer
odnosi się do typu opakowania w Javie, podczas gdyint
jest typem pierwotnym. Wszystko oprócz prymitywnych typów danych w Javie jest implementowane tak, jak obiekty, które sugerują, że Java jest wysoce wykwalifikowanym, czysto obiektowym językiem programowania. Jeśli potrzebujesz, wszystkie typy operacji podstawowych są również dostępne jako typy opakowań w Javie. Typy pierwotne mogą przynieść pewne korzyści w zakresie wydajności, dlatego typy opakowań powinny być używane tylko wtedy, gdy jest to konieczne.W twoim przykładzie jak poniżej.
stała
9
jest automatycznie umieszczana w ramkach (auto-boxing
iunboxing
pojawia się automatycznie odjava 5
początku) do,Integer
a zatem można użyć instrukcji w ten sposób, a takżeInteger n = new Integer(9)
. W rzeczywistości osiąga się to poprzez oświadczenieInteger.valueOf(9).intValue();
źródło
int jest typem pierwotnym, a nie obiektem. Oznacza to, że nie ma z nim żadnych metod. Liczba całkowita jest obiektem z metodami (takimi jak parseInt).
W nowszej wersji Java dostępna jest funkcja automatycznego boxowania (i rozpakowywania). Oznacza to, że kompilator wstawi Integer.valueOf (int) lub integer.intValue () w razie potrzeby. Oznacza to, że tak naprawdę można pisać
co jest interpretowane jako
źródło
Liczba całkowita jest klasą opakowania / Obiektem, a int jest typem pierwotnym. Ta różnica odgrywa ogromną rolę, gdy chcesz przechowywać wartości int w kolekcji, ponieważ akceptują one tylko obiekty jako wartości (do jdk1.4). JDK5 i następne z powodu autoboxowania to zupełnie inna historia.
źródło
Integer.valueOf(i)
lubInteger.intValue()
dla ciebie.Collection<int>
nadal nie będzie działać. Więc to nie jest zupełnie inna historia - to ta sama historia, z odrobiną skrótu.W Javie int jest prymitywnym typem danych, podczas gdy Integer jest klasą Helper, służy do konwersji jednego typu danych na inny.
Na przykład:
Prymitywne typy danych przechowują najszybszą dostępną pamięć, w której klasa Helper jest złożona, i przechowują w pamięci sterty.
referencja ze szkolenia Java Essential „David Gassner”.
źródło
int
jest pierwotnym typem, który reprezentuje liczbę całkowitą. mając na uwadze,Integer
że obiekt jest zawijanyint
.Integer
Obiekt daje większą funkcjonalność, takich jak konwersja do hex, sznurka, itd.Możesz także używać koncepcji OOP z
Integer
. Na przykład możesz użyć liczby całkowitej do generics (tj .).Collection
<Integer>
źródło
To jest wzięte z Java: The Complete Reference, wydanie dziewiąte
źródło
Aby zoptymalizować środowisko wykonawcze kodu Java, dodano
int
pierwotne typyfloat
, w tymbool
itp., Ale zawierają one klasy otoki, dzięki czemu w razie potrzeby można je konwertować i używać jako standardowego obiektu Java wraz z wieloma narzędziami, które są ich członkami funkcje (takie jakInteger.parseInt("1")
).źródło
int
jest prymitywnym typem danych, podczas gdyInteger
jest typem referencyjnym lub opakowaniowym (klasa) w Javie.po
java 1.5
czym wprowadzimy koncepcję autoboxowania i rozpakowywania , możesz zainicjować obaint
lubInteger
tak.Integer
to klasa zdefiniowana wjdk
bibliotece iparseInt()
metoda statyczna należy doInteger
klasyTak,
Integer.parseInt("1");
jest to możliwe w Javie. aleint
jest to typ pierwotny (załóżmy jak słowo kluczowe) w java. Tak więc, nie można wywołaćparseInt()
zint
.źródło