Was ist der Unterschied zwischen einer int und einer Integer in Java und C #?

262

Ich habe More Joel on Software gelesen , als ich auf Joel Spolsky stieß , der etwas über einen bestimmten Programmierertyp sagte, der den Unterschied zwischen einem intund einem Integerin Java / C # (objektorientierte Programmiersprachen) kannte .

Was ist der Unterschied?

CodingWithoutComments
quelle
4
C # hat keinen Integer-Typ.
Judah Gabriel Himango

Antworten:

246

In Java ist der Typ 'int' ein Grundelement, während der Typ 'Integer' ein Objekt ist.

In C # ist der Typ 'int' derselbe wie System.Int32und ein Werttyp (dh eher wie der Java- Typ 'int'). Eine Ganzzahl kann (genau wie alle anderen Werttypen) in ein Objekt eingefügt ("umbrochen") werden.


Die Unterschiede zwischen Objekten und Grundelementen gehen etwas über den Rahmen dieser Frage hinaus, aber um es zusammenzufassen:

Objekte bieten Möglichkeiten für Polymorphismus, werden als Referenz übergeben (oder genauer gesagt, Referenzen werden als Wert übergeben) und vom Heap zugewiesen . Umgekehrt Primitiven sind unveränderlich - Typen , die von Wert übergeben werden und werden oft aus dem zugeordneten Stapel .

Matt
quelle
61
Die Aussage, dass "Objekte [...] als Referenz übergeben werden", ist verwirrend und falsch, IMO. Es ist genauer zu sagen, dass "Objektreferenzen als Wert übergeben werden". (Auch Primitive werden nicht immer vom Stapel zugewiesen - betrachten Sie ein primitives Feld innerhalb eines Objekts ...)
Jon Skeet
5
Zumindest in C # ist int ein Sprachschlüsselwort, das dem Typ Int32 CLR (eigentlich CTS) entspricht.
Scott Dorman
6
Entschuldigung, die englische Sprache macht weder äquivalente Aussagen "etwas durch Referenz übergeben" und "eine Referenz durch Wert übergeben", noch haben diese äquivalente Bedeutungen in einem Programmiersprachenkontext.
Alan Krueger
8
‒1. Dies mag genau beschreiben, wie Java damit umgeht, aber für C # ist es einfach falsch.
Joey
8
Warum wird das gewählt? Die Antwort ist falsch. Es ist nicht ganz richtig für Java und nicht einmal annähernd richtig für C #. Jemand, der dies liest, weiß weniger über das Thema als zuvor.
Thom Smith
153

Nun, in Java ist ein int ein Grundelement, während eine Ganzzahl ein Objekt ist. Das heißt, wenn Sie eine neue Ganzzahl erstellt haben:

Integer i = new Integer(6);

Sie könnten eine Methode für i aufrufen:

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

Während mit einem int:

int i = 6;

Sie können keine Methoden dafür aufrufen, da es sich lediglich um ein Grundelement handelt. So:

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

würde einen Fehler erzeugen, da int kein Objekt ist.

int ist eines der wenigen Grundelemente in Java (zusammen mit char und einigen anderen). Ich bin nicht 100% sicher, aber ich denke, dass das Integer-Objekt mehr oder weniger nur eine int-Eigenschaft und eine ganze Reihe von Methoden zur Interaktion mit dieser Eigenschaft hat (wie zum Beispiel die toString () -Methode). Integer ist also eine ausgefallene Art, mit einem int zu arbeiten (genau wie String vielleicht eine ausgefallene Art ist, mit einer Gruppe von Zeichen zu arbeiten).

Ich weiß, dass Java nicht C ist, aber da ich noch nie in C programmiert habe, ist dies das Beste, was ich der Antwort geben könnte. Hoffe das hilft!

Ganzzahliges Objekt javadoc

Integer Ojbect vs. int primitiver Vergleich

cmcculloh
quelle
in C # int ist ein Synonym für Int32, siehe stackoverflow.com/questions/62503/c-int-or-int32-should-i-care
ripper234
Ich kenne Java nicht, aber es gibt keinen Typ Integer, sondern Int32, Int64 und alle sind struct, was vom Werttyp ist. Primitiv bedeutet in C #, dass Typen vom CLR-Team in FCL (Framework Class Library) definiert werden und deshalb als primitiv bezeichnet werden. In diesem Fall wird sogar Date obj als primitiver Typ bezeichnet.
Tarik
37

Ich werde zu den oben gegebenen hervorragenden Antworten hinzufügen und über das Boxen und Unboxen sprechen und wie dies für Java gilt (obwohl C # es auch hat). Ich werde nur Java-Terminologie verwenden, weil ich damit besser vertraut bin .

Wie in den Antworten erwähnt, inthandelt es sich nur um eine Zahl (als Unboxed- Typ bezeichnet), während Integeres sich um ein Objekt handelt (das die Nummer enthält, daher ein Boxed- Typ). In Java Bedingungen, dass die Mittel (außer diesen Methoden nicht in der Lage zu rufen int), können Sie nicht speichern intoder andere Nicht-Objekttypen in einer Sammlung ( List, Mapusw.). Um sie zu speichern, müssen Sie sie zuerst in der entsprechenden Box verpacken.

Ab Java 5 gibt es so etwas wie Auto-Boxing und Auto-Unboxing, mit denen das Boxen / Unboxen hinter den Kulissen durchgeführt werden kann. Vergleichen und kontrastieren: Java 5 Version:

Deque<Integer> queue;

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

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

Java 1.4 oder früher (auch keine Generika):

Deque queue;

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

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

Es ist zu beachten, dass trotz der Kürze in der Java 5-Version beide Versionen identischen Bytecode generieren. Obwohl also Auto-Boxen und Auto-Unboxing ist sehr bequem , weil Sie weniger Code schreiben, diese Operationen zu tun geschieht hinter den Kulissen mit den gleichen Laufzeitkosten, so dass Sie immer noch von ihrer Existenz bewusst sein müssen.

Hoffe das hilft!

Chris Jester-Young
quelle
2
Deque ist nicht in Java 1.5 oder 1.4. Es wurde in 1.6 hinzugefügt.
Leo Izen
28

Ich werde nur hier posten, da einige der anderen Beiträge in Bezug auf C # etwas ungenau sind.

Richtig: int ist ein Alias ​​für System.Int32.
Falsch: float ist kein Alias ​​für System.Float, sondern fürSystem.Single

Grundsätzlich ist int ein reserviertes Schlüsselwort in der Programmiersprache C # und ein Alias ​​für den System.Int32Werttyp.

float und Float sind jedoch nicht dasselbe, da der richtige floatSystemtyp für '' '' System.Single ist. Es gibt einige Typen wie diesen, die Schlüsselwörter reserviert haben, die nicht direkt mit den Typnamen übereinstimmen.

In C # gibt es keinen Unterschied zwischen '' int'' und '' System.Int32'' oder einem der anderen Paare oder Schlüsselwörter / Systemtypen, außer beim Definieren von Aufzählungen. Mit Aufzählungen können Sie die zu verwendende Speichergröße angeben. In diesem Fall können Sie nur das reservierte Schlüsselwort und nicht den Namen des Systemlaufzeittyps verwenden.

Ob der Wert im int auf dem Stapel, im Speicher oder als referenziertes Heap-Objekt gespeichert wird, hängt vom Kontext und der Verwendung ab.

Diese Deklaration in einer Methode:

int i;

Definiert eine Variable ivom Typ System.Int32, die je nach Optimierung in einem Register oder auf dem Stapel gespeichert ist. Dieselbe Deklaration in einem Typ (Struktur oder Klasse) definiert ein Mitgliedsfeld. Dieselbe Deklaration in einer Methodenargumentliste definiert einen Parameter mit denselben Speicheroptionen wie für eine lokale Variable. (Beachten Sie, dass dieser Absatz nicht gültig ist, wenn Sie Iterator-Methoden in die Mischung ziehen. Dies sind insgesamt verschiedene Bestien.)

Um ein Heap-Objekt zu erhalten, können Sie Folgendes verwenden:

object o = i;

Dadurch wird eine Box-Kopie des Inhalts von iauf dem Heap erstellt. In IL können Sie direkt auf Methoden für das Heap-Objekt zugreifen, in C # müssen Sie es jedoch in ein int zurückwandeln, wodurch eine weitere Kopie erstellt wird. Daher kann das Objekt auf dem Heap nicht einfach in C # geändert werden, ohne eine neue Boxkopie eines neuen int-Werts zu erstellen. (Ugh, dieser Absatz liest sich nicht so leicht.)

Lasse V. Karlsen
quelle
19

In Bezug auf Java 1.5 und Autoboxing gibt es eine wichtige "Eigenart", die beim Vergleich von Integer-Objekten zum Tragen kommt.

In Java sind Integer-Objekte mit den Werten -128 bis 127 unveränderlich (dh für einen bestimmten Integer-Wert, z. B. 23, zeigen alle durch Ihr Programm instanziierten Integer-Objekte mit dem Wert 23 auf genau dasselbe Objekt).

Beispiel: Dies gibt true zurück:

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

Während dies false zurückgibt:

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

Das == vergleicht als Referenz (zeigen die Variablen auf dasselbe Objekt).

Dieses Ergebnis kann je nach verwendeter JVM unterschiedlich sein oder auch nicht. Die Spezifikation Autoboxing für Java 1.5 erfordert, dass Ganzzahlen (-128 bis 127) immer auf dasselbe Wrapper-Objekt gesetzt werden.

Eine Lösung? =) Beim Vergleich von Integer-Objekten sollte immer die Methode Integer.equals () verwendet werden.

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

Weitere Informationen unter java.net Beispiel unter bexhuff.com

andnil
quelle
3
Objekte, die mit dem neuen Operator erstellt wurden, geben im Vergleich zu == immer false zurück. Andreas verwechselt Integer.valueOf (int) mit neuer Integer (int)
McDowell
1
Hinweis: Der Standardwert 127wird vonsun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
KNU
1
@andnil - Ich arbeite mit Bex bei Stellent. Er ist eine sehr gute Quelle, um +1 als Referenz für bexhuff.com zu zitieren!
Bcar
stackoverflow.com/questions/20877086/…
Ciro Santilli 法轮功 冠状 冠状 病 六四 事件 17
19

In Java gibt es zwei Grundtypen in der JVM . 1) Primitive Typen und 2) Referenztypen. int ist ein primitiver Typ und Integer ist ein Klassentyp (der eine Art Referenztyp ist).

Primitive Werte teilen den Status nicht mit anderen primitiven Werten. Eine Variable, deren Typ ein primitiver Typ ist, enthält immer einen primitiven Wert dieses Typs.

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

Ein Objekt ist eine dynamisch erstellte Klasseninstanz oder ein Array. Die Referenzwerte (oft nur Referenzen) sind Zeiger auf diese Objekte und eine spezielle Nullreferenz, die sich auf kein Objekt bezieht. Es kann viele Verweise auf dasselbe Objekt geben.

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

Auch in Java wird alles als Wert übergeben. Bei Objekten ist der übergebene Wert die Referenz auf das Objekt. Ein weiterer Unterschied zwischen int und Integer in Java besteht darin, wie sie in Methodenaufrufen übergeben werden. Zum Beispiel in

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

Die Variable zwei wird als primitiver ganzzahliger Typ 2 übergeben

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);

Die Variable zwei wird als Referenz auf ein Objekt übergeben, das den ganzzahligen Wert 2 enthält.


@ WolfmanDragon: Pass by Reference würde so funktionieren:

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

Wenn das Inkrement aufgerufen wird, übergibt es eine Referenz (einen Zeiger) an die Variable a . Und die Inkrementfunktion ändert direkt die Variable a .

Und für Objekttypen würde es wie folgt funktionieren:

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

Sehen Sie jetzt den Unterschied?

grom
quelle
Nach Ihrer Definition gibt es keine Referenzübergabe. Alles, was übergeben wird, muss einen Wert haben (sogar null ist ein Wert), auch wenn es nur ein Wert des Zeigers ist, andernfalls ist es nur eine leere Menge. Bei CS-Begriffen übergibt die Referenzübergabe den Wert der Referenz (Zeiger). Ich bin ein wenig verwirrt.?
WolfmanDragon
11

In C # ist int nur ein Alias für System.Int32, string für System.String, double für System.Doubleetc ...

Persönlich bevorzuge ich int, string, double usw., weil sie keine using System;Aussage erfordern :) Ein dummer Grund, ich weiß ...

huseyint
quelle
2
Und es sollte hinzugefügt werden, dass C #s int / Int32 nicht mit Javas Integer identisch sind .
Judah Gabriel Himango
10

Es gibt viele Gründe, Wrapper-Klassen zu verwenden:

  1. Wir bekommen zusätzliches Verhalten (zum Beispiel können wir Methoden verwenden)
  2. Wir können Nullwerte speichern, während dies in Grundelementen nicht möglich ist
  3. Sammlungen unterstützen das Speichern von Objekten und nicht von Grundelementen.
Shravan
quelle
8

Dies wurde bereits für Java beantwortet. Hier ist die C # -Antwort:

"Integer" ist kein gültiger Typname in C # und "int" ist nur ein Alias ​​für System.Int32. Im Gegensatz zu Java (oder C ++) gibt es in C # keine speziellen primitiven Typen. Jede Instanz eines Typs in C # (einschließlich int) ist ein Objekt. Hier ist ein Demonstrationscode:

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;
}
Keil
quelle
2
In C # sind sowohl int als auch System.Int32 keine Objekte. Sie sind Werttypen und werden von der CLR ganz anders behandelt als Objekte.
Peter Meyer
4
Tatsächlich ist Int #32 in C # ein Objekt. Es ist ein Werttyp-Strukturobjekt, das von system.object abgeleitet ist. Es wird nicht besonders anders behandelt als andere Wertobjekte, da ein "int" in Java wäre.
Wedge
8

int wird verwendet, um eine primitive Variable zu deklarieren

e.g. int i=10;

Integer wird verwendet, um eine Referenzvariable der Klasse Integer zu erstellen

Integer a = new Integer();
nagarajn89
quelle
8

In Plattformen wie Java sind ints Grundelemente, während Integeres sich um ein Objekt handelt, das ein ganzzahliges Feld enthält. Der wichtige Unterschied besteht darin, dass Primitive immer nach Wert weitergegeben werden und per Definition unveränderlich sind.

Jede Operation mit einer primitiven Variablen gibt immer einen neuen Wert zurück. Auf der anderen Seite werden Objekte als Referenz herumgereicht. Man könnte argumentieren, dass der Punkt auf das Objekt (AKA die Referenz) ebenfalls als Wert weitergegeben wird, der Inhalt jedoch nicht.

mP.
quelle
@ Peter Mortense, Wie wirkt sich (int a; Integer a;) auf das Programm aus? Ich meine, wie machen sie einen Unterschied während der Ausführung.
Anuj Masand
7

Eine weitere Sache, die ich in früheren Antworten nicht sehe: In Java werden die primitiven Wrapper-Klassen wie Integer, Double, Float, Boolean ... und String als invariant angenommen, sodass beim Übergeben einer Instanz dieser Klassen die aufgerufenen Klassen Die Methode konnte Ihre Daten in keiner Weise ändern, in opositión mit den meisten anderen Klassen, deren interne Daten durch ihre öffentlichen Methoden geändert werden konnten. Damit diese Klassen neben dem Konstruktor nur 'Getter'-Methoden haben, keine' Setter '.

In einem Java-Programm werden String-Literale in einem separaten Teil des Heap-Speichers gespeichert, nur in einer Instanz für Literal, um Speicherplatz zu sparen und diese Instanzen wiederzuverwenden

Telcontar
quelle
7

Haben Sie schon einmal programmiert, dann ist (int) einer der primitiven Typen, die Sie für Ihre Variablen festlegen können (genau wie char, float, ...).

Integer ist jedoch eine Wrapper-Klasse, mit der Sie einige Funktionen für eine int-Variable ausführen können (z. B. in String konvertieren oder umgekehrt, ...). Beachten Sie jedoch, dass die Methoden in den Wrapper-Klassen statisch sind, damit Sie sie verwenden können jederzeit ohne eine Instanz der Integer-Klasse zu erstellen. als Zusammenfassung:

int x;
Integer y; 

x und y sind beide Variablen vom Typ int, aber y wird von einer Integer-Klasse umschlossen und verfügt über mehrere Methoden, die Sie verwenden. Wenn Sie jedoch einige Funktionen der Integer-Wrapper-Klasse aufrufen müssen, können Sie dies einfach tun.

Integer.toString(x);

Beachten Sie jedoch, dass sowohl x als auch y korrekt sind. Wenn Sie sie jedoch nur als primitiven Typ verwenden möchten, verwenden Sie die einfache Form (zur Definition von x).

Mr.Q.
quelle
7

Java:

int, double, long, byte, float, double, short, boolean, char- Primitiven. Wird zum Halten der von der Sprache unterstützten Basisdatentypen verwendet. Die primitiven Typen sind nicht Teil der Objekthierarchie und erben kein Objekt. Dies kann unter Bezugnahme auf eine Methode übergeben werden.

Double, Float, Long, Integer, Short, Byte, Character, Und Booleanist Typ Wrappers, verpackt in java.lang. Alle Wrapper vom numerischen Typ definieren Konstruktoren, mit denen ein Objekt aus einem bestimmten Wert oder einer Zeichenfolgendarstellung dieses Werts erstellt werden kann. Die Verwendung von Objekten kann selbst den einfachsten Berechnungen einen Overhead hinzufügen.

Seit JDK 5 enthält Java zwei sehr hilfreiche Funktionen: Autoboxing und Autounboxing. Autoboxing / Unboxing vereinfacht und rationalisiert Code, der primitive Typen in Objekte konvertieren muss, erheblich und umgekehrt.

Beispiel für Konstruktoren:

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

Beispiel für Boxen / Unboxen:

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
    }
}

Beispiel für Autoboxing / Autounboxing:

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
    }
}

PS Herbert Schildts Buch wurde als Referenz genommen.

J-Alex
quelle
4

Eine int-Variable enthält einen 32-Bit-Ganzzahlwert mit Vorzeichen. Eine Ganzzahl (mit Großbuchstaben I) enthält einen Verweis auf ein Objekt vom Typ (Klassen-) Typ Integer oder auf Null.

Java wechselt automatisch zwischen den beiden; von Integer zu int, wenn das Integer-Objekt als Argument für einen int-Operator auftritt oder einer int-Variablen zugewiesen wird oder ein int-Wert einer Integer-Variablen zugewiesen wird. Dieses Casting nennt man Boxen / Unboxen.

Wenn eine Integer-Variable, die auf null verweist, explizit oder implizit deaktiviert ist, wird eine NullPointerException ausgelöst.


quelle
4

Ein int und eine Ganzzahl in Java und C # sind zwei verschiedene Begriffe, die zur Darstellung verschiedener Dinge verwendet werden. Dies ist einer der primitiven Datentypen, die einer Variablen zugewiesen werden können, die genau gespeichert werden kann. Jeweils ein Wert seines deklarierten Typs.

Beispielsweise:

int number = 7;

Wo intist der Datentyp der Variablennummer zugeordnet, die den Wert sieben enthält? Ein intist also nur ein Primitiv, kein Objekt.

Während an Integereine Wrapper-Klasse für einen primitiven Datentyp ist, der statische Methoden hat. Dies kann als Argument für eine Methode verwendet werden, für die ein Objekt erforderlich ist, wobei int als Argument für eine Methode verwendet werden kann, für die ein ganzzahliger Wert erforderlich ist, der für arithmetische Ausdrücke verwendet werden kann.

Beispielsweise:

Integer number = new Integer(5);
Ricky Muchedzi
quelle
4

In beiden Sprachen (Java und C #) inthandelt es sich um eine 4-Byte-Ganzzahl mit Vorzeichen.

Im Gegensatz zu Java bietet C # sowohl vorzeichenbehaftete als auch vorzeichenlose Ganzzahlwerte. Da Java und C # objektobjektorientiert sind, werden einige Operationen in diesen Sprachen nicht direkt auf Anweisungen abgebildet, die von der Laufzeit bereitgestellt werden, und müssen daher als Teil eines Objekts eines bestimmten Typs definiert werden.

C # gibt an, System.Int32welcher Werttyp einen Teil des Speichers verwendet, der zum Referenztyp auf dem Heap gehört.

Java stellt java.lang.Integereinen Referenztyp bereit, mit dem gearbeitet wird int. Die Verfahren in Integernicht direkt Zeit laufen kompiliert werden instructions.So wir einen int - Wert Kasten es in eine Instanz von Integer zu konvertieren und die Methoden verwenden , die Instanz eines Typs erwartet (wie toString(), parseInt(), valueOf()usw.).

In C # int Variable bezieht sich auf System.Int32.Any4-Byte - Wert im Speicher kann als primitiven int interpretiert werden, die von der Instanz System.Int32.So int manipuliert werden kann , ist ein Alias für System.Int32.WhenVerwendung integer-verwandter Methoden wie int.Parse(), int.ToString()usw. Ganzzahl ist in kompiliert die FCL- System.Int32Struktur, die die jeweiligen Methoden aufruft, wie Int32.Parse(), Int32.ToString().

Bindumalini KK
quelle
4

In Java ist der intTyp ein primitiver Datentyp, wobei der IntegerTyp ein Objekt ist.

In C # ist der intTyp auch ein Datentyp wie System.Int32. Ein integer(wie alle anderen Werttypen) kann in ein Objekt gepackt ("eingewickelt") werden.

thamashi97
quelle
3

In Java ist int ein primitiver Datentyp, während Integer eine Helper-Klasse ist. Es wird verwendet, um einen Datentyp in einen anderen zu konvertieren.

Beispielsweise:

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

Primitive Datentypen speichern den schnellsten verfügbaren Speicher, in dem die Helper-Klasse komplex ist, und speichern ihn im Heep-Speicher.

Referenz aus "David Gassner" Java Essential Training.

Aqeel Haider
quelle
2

"int" ist ein primitiver Datentyp und "Integer" in der Wrapper-Klasse in Java. "Integer" kann als Argument für eine Methode verwendet werden, für die ein Objekt erforderlich ist, wobei "int" als Argument für eine Methode verwendet werden kann, für die ein ganzzahliger Wert erforderlich ist, der für arithmetische Ausdrücke verwendet werden kann.

Lockerer
quelle
1

01. Ganzzahl kann null sein. Int kann jedoch nicht null sein.

Integer value1 = null; //OK

int value2 = null      //Error

02. Nur Wrapper Classes-Typwerte können an eine Auflistungsklasse übergeben werden.

(Wrapper-Klassen - Boolesch, Zeichen, Byte, Kurz, Ganzzahl, Lang, Gleitkomma, Doppel)

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

Aber normalerweise fügen wir der Sammlungsklasse primitive Werte hinzu? Ist Punkt 02 richtig?

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

Ja 02 ist richtig, beacouse autoboxing.

Autoboxing ist die automatische Konvertierung, die der Java-Compiler zwischen dem primitiven Typ und der entsprechenden Wrapper-Klasse vornimmt.

Dann 5 durch Autoboxing als Integer-Wert konvertieren.

JustCode
quelle
1

int ist in der Bibliotheksfunktion c # vordefiniert, aber in Java können wir ein Objekt von erstellen Integer

Mausam Sinha
quelle
0

(Java-Version) In einfachen Worten ist int primitiv und Integer ist das Wrapper-Objekt für int.

Ein Beispiel für die Verwendung von Integer vs int: Wenn Sie die Variable int und null erneut vergleichen möchten, wird ein Fehler ausgegeben.

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
quelle
0

In Java nach meinem Wissen, wenn Sie dann lernen, wenn Sie int a schreiben; dann in Java Generic wird es Code wie kompilieren Integer a = new Integer(). Also, laut Generika Integerwird nicht verwendet, sondern intverwendet. da gibt es also so einen Unterschied.

Aatu Dave
quelle
Es gibt 18 weitere Antworten auf diese Frage. Fügt deins etwas hinzu, das die anderen verpasst haben? Es hilft nicht, dass dies zunächst nicht grammatikalisch ist.
Teepeemm
0

int ist ein primitiver Datentyp. Integer ist eine Wrapper-Klasse. Es kann int-Daten als Objekte speichern.

Kavinda Pushpitha
quelle
0

int ist ein primitiver Datentyp, während Integer ein Objekt ist. Wenn Sie ein Objekt mit Integer erstellen, erhalten Sie Zugriff auf alle Methoden, die in der Integer-Klasse verfügbar sind. Wenn Sie jedoch einen primitiven Datentyp mit int erstellen, können Sie diese eingebauten Methoden nicht verwenden und müssen sie selbst definieren. Wenn Sie jedoch keine anderen Methoden wünschen und das Programm speichereffizienter gestalten möchten, können Sie den primitiven Datentyp verwenden, da das Erstellen eines Objekts den Speicherverbrauch erhöht.

Lourdes
quelle