Jaka jest różnica między int a Integer w Javie i C #?

262

Czytałam Więcej Joel on Software kiedy natknąłem Joel Spolsky mówiąc coś o szczególnym typu programator znając różnicę pomiędzy intoraz Integerw Java / C # (Programowanie obiektowe języki).

Jaka jest różnica?

CodingWithoutComments
źródło
4
C # nie ma typu Integer.
Judah Gabriel Himango,

Odpowiedzi:

247

W Javie typ „int” jest prymitywny, podczas gdy typ „Integer” jest obiektem.

W języku C # typ „int” jest taki sam, jak System.Int32i jest typem wartości (tzn. Bardziej przypomina „int” java). Liczba całkowita (podobnie jak inne typy wartości) może być umieszczana w ramkach („zawinięta”) w obiekt.


Różnice między obiektami a prymitywami są nieco poza zakresem tego pytania, ale podsumowując:

Obiekty zapewniają udogodnienia dla polimorfizmu, są przekazywane przez referencję (lub dokładniej mają referencje przekazywane przez wartość) i są przydzielane ze sterty . I odwrotnie, prymitywy to niezmienne typy, które są przekazywane przez wartość i często są przydzielane ze stosu .

Matt
źródło
61
Stwierdzenie, że „obiekty [...] są przekazywane przez odwołanie” jest mylące i niepoprawne, IMO. Dokładniej jest powiedzieć, że „odwołania do obiektów są przekazywane przez wartość”. (Również prymitywy nie zawsze są przydzielane ze stosu - rozważ prymitywne pole w obiekcie ...)
Jon Skeet
5
Co najmniej w języku C #, int jest słowem kluczowym języka, które jest równoważne typowi Int32 CLR (właściwie CTS).
Scott Dorman
6
Niestety, w języku angielskim nie ma wyrażeń równoważnych „przekazać coś przez odniesienie” i „przekazać odwołanie do czegoś według wartości”, ani też nie mają one równoważnego znaczenia w kontekście języka programowania.
Alan Krueger
8
‒1. Może to dokładnie opisać, w jaki sposób Java to obsługuje, ale w języku C # jest po prostu błędne.
Joey,
8
Dlaczego jest to przegłosowane? Odpowiedź jest zła. Nie jest to odpowiednie dla Javy, a nawet nie jest blisko dla C #. Ktoś, kto to czyta, będzie wiedział mniej na ten temat niż wcześniej.
Thom Smith,
153

Cóż, w Javie int jest prymitywem, podczas gdy liczba całkowita jest obiektem. Oznacza to, że jeśli utworzyłeś nową liczbę całkowitą:

Integer i = new Integer(6);

Możesz wywołać metodę na:

String s = i.toString();//sets s the string representation of i

Natomiast z int:

int i = 6;

Nie można wywoływać żadnych metod, ponieważ jest to po prostu prymityw. Więc:

String s = i.toString();//will not work!!!

spowoduje błąd, ponieważ int nie jest obiektem.

int jest jednym z niewielu prymitywów w Javie (wraz z char i kilkoma innymi). Nie jestem w 100% pewien, ale myślę, że obiekt Integer mniej więcej ma po prostu właściwość int i całą masę metod interakcji z tą właściwością (na przykład metoda toString ()). Tak więc Integer to fantazyjny sposób pracy z intem (podobnie jak String może być fantazyjnym sposobem pracy z grupą znaków).

Wiem, że Java nie jest C, ale ponieważ nigdy nie programowałem w C, jest to najbliższa odpowiedź. Mam nadzieję że to pomoże!

Javadoc obiekt liczb całkowitych

Integer Ojbect vs. int pierwotne porównanie

cmcculloh
źródło
w C # int jest synonimem Int32, patrz stackoverflow.com/questions/62503/c-int-or-int32-should-i-care
ripper234 19.09.08
Nie znam Java, ale nie ma typu Integer, ale Int32, Int64 i wszystkie są strukturami o typie wartości. Primitive oznacza w C #, że typy są zdefiniowane w FCL (Framework Class Library) przez zespół CLR i dlatego są nazywane pierwotnymi. W tym przypadku nawet Data obj jest nazywana typem pierwotnym.
Tarik
37

Dodam do doskonałych odpowiedzi podanych powyżej i będę mówić o boksowaniu i rozpakowywaniu oraz o tym, jak to odnosi się do Javy (chociaż C # też to ma). Użyję tylko terminologii Java, bo jestem bardziej au fait z tym.

Jak wspomniano w odpowiedziach, intjest to tylko liczba (nazywana typem bez pudełka ), podczas gdy Integerjest to obiekt (który zawiera liczbę, stąd typ z ramką ). Pod względem Java, co oznacza, że (z wyjątkiem nie jest w stanie wywołać metody na int), nie można przechowywać intlub inne rodzaje non-object (w zbiorach List, Mapetc.). Aby je przechowywać, musisz je najpierw zapakować w odpowiadający mu rodzaj pudełka.

Java 5 i nowsze mają coś, co nazywa się auto- boxingiem i auto-unboxingiem, które pozwalają na boksowanie / rozpakowywanie się za kulisami. Porównaj i porównaj: wersja Java 5:

Deque<Integer> queue;

void add(int n) {
    queue.add(n);
}

int remove() {
    return queue.remove();
}

Java 1.4 lub wcześniejsza (bez generycznych):

Deque queue;

void add(int n) {
    queue.add(Integer.valueOf(n));
}

int remove() {
    return ((Integer) queue.remove()).intValue();
}

Należy zauważyć, że pomimo zwięzłości w wersji Java 5, obie wersje generują identyczny kod bajtowy. Tak więc, chociaż auto-boxowanie i auto-rozpakowywanie są bardzo wygodne, ponieważ piszesz mniej kodu, operacje te zdarzają się za kulisami, przy tych samych kosztach czasu wykonywania, więc nadal musisz być świadomy ich istnienia.

Mam nadzieję że to pomoże!

Chris Jester-Young
źródło
2
Deque nie ma w Javie 1.5 lub 1.4. Dodano go w wersji 1.6.
Leo Izen,
28

Po prostu opublikuję tutaj, ponieważ niektóre inne posty są nieco niedokładne w stosunku do C #.

Prawidłowo: int to alias dla System.Int32.
Źle: float nie jest aliasem dla System.Float, ale dlaSystem.Single

Zasadniczo int jest zastrzeżonym słowem kluczowym w języku programowania C # i jest aliasem dla System.Int32typu wartości.

float i Float to nie to samo, ponieważ właściwym typem systemu dla float„” jest System.Single. Istnieje kilka takich typów, które mają zarezerwowane słowa kluczowe, które wydają się nie pasować bezpośrednio do nazw typów.

W języku C # nie ma różnicy między symbolami „ inta” i „” System.Int32, ani żadnymi innymi parami lub słowami kluczowymi / typami systemów, z wyjątkiem definiowania wyliczeń. Za pomocą wyliczeń można określić rozmiar pamięci do użycia, w tym przypadku można użyć tylko słowa kluczowego zarezerwowanego, a nie nazwy typu środowiska wykonawczego systemu.

Wether wartość int będzie przechowywana na stosie, w pamięci lub jako obiekt referencyjny stosu zależy od kontekstu i sposobu jego użycia.

Ta deklaracja w metodzie:

int i;

definiuje zmienną itypu System.Int32, żyjącą w rejestrze lub na stosie, w zależności od optymalizacji. Ta sama deklaracja w typie (struct lub klasa) definiuje pole członka. Ta sama deklaracja na liście argumentów metody definiuje parametr z tymi samymi opcjami przechowywania, co w przypadku zmiennej lokalnej. (zwróć uwagę, że ten akapit nie jest ważny, jeśli zaczniesz wciągać metody iteratora do mieszanki, są to w sumie różne bestie)

Aby uzyskać obiekt sterty, możesz użyć boksu:

object o = i;

spowoduje to utworzenie pudełkowej kopii zawartości istosu. W IL można uzyskać dostęp do metod bezpośrednio na obiekcie stosu, ale w języku C # należy rzutować go z powrotem na int, który utworzy kolejną kopię. Zatem obiektu na stercie nie można łatwo zmienić w języku C # bez utworzenia nowej pudełkowej kopii nowej wartości int. (Ugh, ten akapit nie jest tak łatwy do odczytania.)

Lasse V. Karlsen
źródło
19

Jeśli chodzi o Javę 1.5 i autoboxing, istnieje ważne „dziwactwo”, które pojawia się podczas porównywania obiektów całkowitoliczbowych.

W Javie obiekty całkowite o wartościach od -128 do 127 są niezmienne (to znaczy, dla jednej konkretnej wartości całkowitej, powiedzmy 23, wszystkie obiekty liczb całkowitych tworzone w twoim programie z wartością 23 wskazują dokładnie ten sam obiekt).

Przykład zwraca wartość true:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //  true

Chociaż zwraca wartość false:

Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); //  false

== porównuje przez odniesienie (czy zmienne wskazują ten sam obiekt).

Ten wynik może, ale nie musi się różnić, w zależności od używanej maszyny JVM. Specyfikacja autoboxowania dla Java 1.5 wymaga, aby liczby całkowite (od -128 do 127) zawsze zawierały pole dla tego samego obiektu opakowania.

Rozwiązanie? =) Zawsze należy używać metody Integer.equals () podczas porównywania obiektów Integer.

System.out.println(i1.equals(i2)); //  true

Więcej informacji na java.net Przykład na bexhuff.com

andnil
źródło
3
Obiekty utworzone za pomocą nowego operatora zawsze zwracają wartość false w porównaniu z ==. Andreas myli Integer.valueOf (int) z nową Integer (int)
McDowell,
1
Uwaga: wartość domyślna 127jest pobierana zsun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
KNU
1
@andnil - Używam do pracy z Bexem w Stellent. Jest bardzo dobrym źródłem do cytowania +1 dla referencji bexhuff.com!
bcar 18.01.16
stackoverflow.com/questions/20877086/...
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
19

W Javie istnieją dwa podstawowe typy w JVM . 1) Typy pierwotne i 2) Typy referencyjne. int jest typem pierwotnym, a liczba całkowita jest typem klasy (który jest rodzajem typu referencyjnego).

Wartości pierwotne nie dzielą stanu z innymi wartościami pierwotnymi. Zmienna, której typ jest pierwotny, zawsze zawiera pierwotną wartość tego typu.

int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4

Obiekt jest dynamicznie tworzoną instancją klasy lub tablicą. Wartości referencyjne (często tylko referencje) są wskaźnikami do tych obiektów i specjalnym odwołaniem zerowym, które nie odnosi się do żadnego obiektu. Może istnieć wiele odniesień do tego samego obiektu.

Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the 
                                 // same object as aNumber

Również w Javie wszystko jest przekazywane wartością. W przypadku obiektów przekazywana wartość jest odniesieniem do obiektu. Kolejną różnicą między int i Integer w Javie jest to, jak są one przekazywane w wywołaniach metod. Na przykład w

public int add(int a, int b) {
    return a + b;
}
final int two = 2;
int sum = add(1, two);

Zmienna druga jest przekazywana jako pierwotna liczba całkowita typu 2. Podczas gdy w

public int add(Integer a, Integer b) {
    return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);

Zmienna druga jest przekazywana jako odwołanie do obiektu, który zawiera wartość całkowitą 2.


@WolfmanDragon: Przekazywanie przez odniesienie działałoby tak:

public void increment(int x) {
  x = x + 1;
}
int a = 1;
increment(a);
// a is now 2

Po wywołaniu przyrostu przekazuje odwołanie (wskaźnik) do zmiennej a . A przyrost funkcji bezpośrednio modyfikuje zmienną A .

A dla typów obiektów działałoby to w następujący sposób:

public void increment(Integer x) {
  x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2

Czy widzisz teraz różnicę?

grom
źródło
Zgodnie z Twoją definicją nie ma odniesienia przez odniesienie. Wszystko, co jest przekazywane, musi mieć wartość (nawet null jest wartością), nawet jeśli jest to tylko wartość wskaźnika, w przeciwnym razie jest to tylko pusty zestaw. Zgodnie z warunkami CS, przekazanie przez referencję to przekazanie wartości referencji (wskaźnika). Jestem trochę zdezorientowany.
WolfmanDragon
11

W języku C #, int jest tylko alias dla System.Int32, string dla System.Stringdwukrotnie do System.Doubleetc ...

Osobiście wolę int, string, double itp., Ponieważ nie wymagają using System;oświadczenia :) Głupi powód, wiem ...

huseyint
źródło
2
I należy dodać, int / Int32 C # nie są takie same jak Integer Java.
Judah Gabriel Himango,
10

Istnieje wiele powodów, aby używać klas opakowań:

  1. Dostajemy dodatkowe zachowanie (na przykład możemy użyć metod)
  2. Możemy przechowywać wartości null, podczas gdy w prymitywach nie możemy
  3. Kolekcje obsługują przechowywanie obiektów, a nie prymitywów.
Shravan
źródło
8

To jest już odpowiedzią na Javę, oto odpowiedź C #:

„Liczba całkowita” nie jest prawidłową nazwą typu w języku C #, a „int” jest tylko aliasem dla System.Int32. Ponadto, inaczej niż w Javie (lub C ++), nie ma żadnych specjalnych typów pierwotnych w C #, każda instancja typu w C # (w tym int) jest obiektem. Oto przykładowy kod:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}
Klin
źródło
2
Dla jasności, w języku C #, int oraz System.Int32 nie są obiektami. Są to typy wartości i są traktowane znacznie inaczej przez CLR niż obiekty.
Peter Meyer,
4
Właściwie w C # Int32 jest obiektem. Jest to obiekt struktury typu wartości pochodzący z system.object. Nie jest traktowany szczególnie inaczej niż inne obiekty wartości, ponieważ „int” byłoby w Javie.
Wedge
8

int służy do deklarowania pierwotnej zmiennej

e.g. int i=10;

Liczba całkowita służy do tworzenia zmiennej referencyjnej klasy Integer

Integer a = new Integer();
nagarajn89
źródło
8

Na platformach takich jak Java, ints są prymitywami, podczas gdy Integersą obiektami zawierającymi pola liczb całkowitych. Ważnym rozróżnieniem jest to, że prymitywy są zawsze przekazywane według wartości, a z definicji są niezmienne.

Każda operacja obejmująca zmienną pierwotną zawsze zwraca nową wartość. Z drugiej strony obiekty są przekazywane przez odniesienie. Można argumentować, że punkt do obiektu (AKA referencja) również jest przekazywany przez wartość, ale treść nie jest.

poseł.
źródło
@peter Mortense, How How (int a; Integer a;) wpływa na program, to znaczy, jak robią różnicę podczas wykonywania.
Anuj Masand
7

Jeszcze jedna rzecz, której nie widzę w poprzednich odpowiedziach: w Javie prymitywne klasy opakowań, takie jak Integer, Double, Float, Boolean ... i String, są rzekomo niezmienne, tak więc po przekazaniu instancji tych klas wywoływane metoda nie mogła w żaden sposób zmienić twoich danych, w przeciwieństwie do większości innych klas, które wewnętrzne dane mogłyby zostać zmienione za pomocą publicznych metod. Aby te klasy miały tylko metody „pobierające”, a nie „ustawiające” oprócz konstruktora.

W programie java Literały łańcuchowe są przechowywane w osobnej części pamięci sterty, tylko w instancji literałowej, aby zaoszczędzić pamięć przy ponownym użyciu tych instancji

Telcontar
źródło
7

czy kiedykolwiek wcześniej programowałeś (int) jest jednym z podstawowych typów, które możesz ustawić dla swoich zmiennych (podobnie jak char, float, ...).

ale liczba całkowita jest klasą opakowania, której można użyć do wykonania niektórych funkcji na zmiennej int (np. przekonwertować ją na ciąg znaków lub odwrotnie, ...), ale należy pamiętać, że metody w klasach opakowań są statyczne, dzięki czemu można ich używać w dowolnym momencie bez tworzenia wystąpienia klasy Integer. podsumowując:

int x;
Integer y; 

x i y są zmiennymi typu int, ale y jest zawinięte przez klasę całkowitą i ma kilka metod, których używasz, ale w przypadku, gdy potrzebujesz wywołać niektóre funkcje klasy opakowującej liczby całkowitej, możesz to zrobić po prostu.

Integer.toString(x);

ale pamiętaj, że zarówno x, jak i y są poprawne, ale jeśli chcesz ich używać tylko jako prymitywnego typu, użyj prostej formy (używanej do definiowania x).

Mr.Q
źródło
7

Jawa:

int, double, long, byte, float, double, short, boolean, char- prymitywy. Służy do przechowywania podstawowych typów danych obsługiwanych przez język. typy pierwotne nie są częścią hierarchii obiektów i nie dziedziczą obiektu. Nie można przejść przez odwołanie do metody.

Double, Float, Long, Integer, Short, Byte, Character, I Booleansą typu Owijarki, pakowane w java.lang. Wszystkie opakowania typu liczbowego definiują konstruktory, które umożliwiają konstruowanie obiektu na podstawie podanej wartości lub ciąg znaków reprezentujący tę wartość. Korzystanie z obiektów może dodać koszty nawet do najprostszych obliczeń.

Począwszy od JDK 5, Java zawiera dwie bardzo przydatne funkcje: autoboxing i autounboxing. Autoboxing / unboxing znacznie upraszcza i usprawnia kod, który musi konwertować prymitywne typy na obiekty i odwrotnie.

Przykład konstruktorów:

Integer(int num)
Integer(String str) throws NumberFormatException
Double(double num)
Double(String str) throws NumberFormatException

Przykład boksowania / rozpakowywania:

class ManualBoxing {
        public static void main(String args[]) {
        Integer objInt = new Integer(20);  // Manually box the value 20.
        int i = objInt.intValue();  // Manually unbox the value 20
        System.out.println(i + " " + iOb); // displays 20 20
    }
}

Przykład autoboxowania / autounboxingu:

class AutoBoxing {
    public static void main(String args[]) {
        Integer objInt = 40; // autobox an int
        int i = objInt ; // auto-unbox
        System.out.println(i + " " + iOb); // displays 40 40
    }
}

Książka PS Herberta Schildta została wzięta za odniesienie.

J-Alex
źródło
4

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.


źródło
4

Int i Integer w Javie i C # to dwa różne terminy używane do reprezentowania różnych rzeczy. Jest to jeden z podstawowych typów danych, który można przypisać do zmiennej, która może dokładnie przechowywać. Jedna wartość zadeklarowanego typu na raz.

Na przykład:

int number = 7;

Gdzie intjest typ danych przypisany do numeru zmiennej, która zawiera wartość siedem. Zatem an intto tylko prymityw, a nie przedmiot.

Chociaż an Integerjest klasą opakowania dla pierwotnego typu danych, który ma metody statyczne. Może to być użyte jako argument metody wymagającej obiektu, gdzie jako int może być użyte jako argument metody wymagającej wartości całkowitej, która może być użyta do wyrażenia arytmetycznego.

Na przykład:

Integer number = new Integer(5);
Ricky Muchedzi
źródło
4

W obu językach (Java i C #) intjest 4-bajtową liczbą całkowitą ze znakiem.

W przeciwieństwie do Java, C # Zapewnia zarówno liczby całkowite ze znakiem, jak i bez znaku. Ponieważ Java i C # są obiektowo zorientowane obiektowo, niektóre operacje w tych językach nie są mapowane bezpośrednio na instrukcje dostarczone przez środowisko wykonawcze i dlatego muszą być zdefiniowane jako część obiektu określonego typu.

C # zapewnia, System.Int32który jest typem wartości wykorzystującym część pamięci, która należy do typu odwołania na stercie.

java zapewnia java.lang.Integertyp referencyjny działający na int. Te metody Integernie mogą być opracowywane bezpośrednio do uruchomienia czas instructions.So my box wartość int aby przekształcić go w instancji Integer i korzystać z metod, która oczekuje wystąpienie jakiegoś typu (jak toString(), parseInt(), valueOf()itp.)

C # zmienna Int odnosi się do System.Int32.Anywartości 4 bajtów w pamięci, może być interpretowane, jako pierwotnego int, które mogą być ustawiane przez wystąpienie System.Int32.So Int jest alias System.Int32.Whenstosując metody całkowite związane jak int.Parse(), int.ToString()itd. Są zestawiane w całkowita FCL System.Int32struct wywołanie odpowiednich metod, takich jak Int32.Parse(), Int32.ToString().

Bindumalini KK
źródło
4

W Javie inttyp jest pierwotnym typem danych, gdzie jako Integertyp jest obiektem.

W języku C # inttyp jest również typem danych takim samym jak System.Int32. integer(Podobnie jak innych typów wartości) mogą być zapakowane ( „owinięty”) do obiektu.

thamashi97
źródło
3

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:

double doubleValue = 156.5d;
Double doubleObject  = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();

Prymitywne typy danych przechowują najszybszą dostępną pamięć, w której klasa Helper jest złożona, i przechowują w pamięci heep.

referencja ze szkolenia Java Essential „David Gassner”.

Aqeel Haider
źródło
2

„int” jest pierwotnym typem danych, a „Integer” w klasie Wrapper w Javie. „Liczba całkowita” może być użyta jako argument metody wymagającej obiektu, gdzie jako „int” może być użyta jako argument metody wymagającej wartości całkowitej, która może być użyta do wyrażenia arytmetycznego.

Looser
źródło
1

01. Liczba całkowita może być zerowa. Ale int nie może być zerowy.

Integer value1 = null; //OK

int value2 = null      //Error

02. Tylko wartości typu klas opakowań można przekazywać do dowolnej klasy kolekcji.

(Klasy opakowań - logiczne, znakowe, bajtowe, krótkie, całkowite, długie, zmiennoprzecinkowe, podwójne)

List<Integer> element = new ArrayList<>();
int valueInt = 10;
Integer  valueInteger = new Integer(value);
element.add(valueInteger);

Ale zwykle dodajemy prymitywne wartości do klasy kolekcji? Czy punkt 02 jest poprawny?

List<Integer> element = new ArrayList<>();
element.add(5);

Tak 02 jest poprawne, ponieważ autoboxing.

Autoboxing to automatyczna konwersja dokonywana przez kompilator Java między typem pierwotnym a odpowiadającą mu klasą opakowania.

Następnie 5 przekonwertuj jako wartość całkowitą przez autoboxing.

JustCode
źródło
1

int jest predefiniowany w funkcji biblioteki c #, ale w Javie możemy stworzyć obiekt Integer

Mausam Sinha
źródło
0

(Wersja Java) W prostych słowach int jest prymitywne, a Integer jest opakowaniem dla int.

Jeden przykład zastosowania Integer vs. int, gdy chcesz porównać i int zmienna ponownie null, wyrzuci błąd.

int a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is wrong - cannot compare primitive to null
{
do something...}

Instead you will use,
Integer a;
//assuming a value you are getting from data base which is null
if(a ==null) // this is correct/legal
{ do something...}
Rishabh Agarwal
źródło
0

W java, zgodnie z moją wiedzą, jeśli uczysz się wtedy, kiedy piszesz int a; następnie w java generic skompiluje kod podobny do Integer a = new Integer(). Tak więc, jak ogólnie, Integernie jest używany, ale intjest używany. więc jest taka różnica.

Aatu Dave
źródło
Istnieje 18 innych odpowiedzi na to pytanie. Czy twój dodaje coś, czego inni nie zauważyli? To nie pomaga, że ​​nie jest to gramatyczne na początek.
Teepeemm,
0

int jest pierwotnym typem danych. Liczba całkowita jest klasą opakowania. Może przechowywać int dane jako obiekty.

Kavinda Pushpitha
źródło
0

int jest pierwotnym typem danych, podczas gdy liczba całkowita jest obiektem. Utworzenie obiektu za pomocą Integer daje dostęp do wszystkich metod dostępnych w klasie Integer. Ale jeśli utworzysz prymitywny typ danych za pomocą int, nie będziesz w stanie używać tych metod wbudowania i musisz je zdefiniować samodzielnie. Ale jeśli nie chcesz żadnych innych metod i chcesz zwiększyć wydajność pamięci programu, możesz użyć pierwotnego typu danych, ponieważ utworzenie obiektu zwiększy zużycie pamięci.

Lourdes
źródło