wake-up-neo.com

Welches ist zu verwenden, int oder Integer

Ich muss ein Datenübertragungsobjekt erstellen, das ich zum Speichern der aus der Datenbank abgerufenen Datensätze verwenden werde. In diesem Datenübertragungsobjekt muss ich ein numerisches Feld deklarieren. Für das was besser ist - int oder Integer

Wenn ich das Feld als Integer definiere, hat dies Auswirkungen auf den Typ "Integer", wenn ich mehr als 2000 Datensätze von der DB abrufe!

Danke im Voraus.

51
Veera

Integer ist eine bessere Option, da es null verarbeiten kann. für int wird null zu 0, wenn resultSet.getInt(..) verwendet wird. Andernfalls wird möglicherweise eine Ausnahme ausgelöst, z. B. "null kann nicht auf eine primitive Eigenschaft festgelegt werden".

Leistung ist hier wenig von Belang.

  • wenn Sie int wählen, fügen Sie am Ende zusätzlichen Code für die Handhabung hinzu. und das würde dir nicht viel nützen. Ihr Code wird nicht sauber und unkompliziert sein, viel Code für die Kesselplatte, und Sie würden nicht einmal an Leistung gewinnen.
  • lassen Sie mich klarstellen, dass für Datenbanken null nicht gleich null ist. Manchmal endet die Eingabe von 0, wobei null beabsichtigt war. Stellen Sie sich den Fall vor, in dem der Benutzer ein Formular gesendet hat, und liefert keinen Wert für int. Am Ende erhalten Sie standardmäßig 0. Es macht Sinn oder tut das wirklich, wenn das Feld not null in der Datenbank ist.
108
Adeel Ansari

Sie sollten Ihre Entscheidung wirklich auf der Grundlage dessen, was Sie für Ihr Objekt tun müssen, und nicht aufgrund der Leistungskosten treffen. Die Entscheidung über die Leistung sollte getroffen werden, sobald ein Geschwindigkeitsproblem mit einem Profiler identifiziert wurde - der Wurzel allen Übels und all dem.

Sehen Sie sich einige der Funktionen beider an und verwenden Sie diese für Ihre Entscheidung, z.

  • Integer kann null sein, int kann nicht. Ist also int im FeldDBa Nullable?
  • Benötigen Sie Zugriff auf die Klassenmethoden Integer?
  • Machst du Rechnen?

Ich persönlich entscheide mich immer für das Primitive über dem Wrapper. Aber das ist nur eine Vorzugssache und nicht auf einem technischen Wert.

18
tddmonkey

Meiner Meinung nach hängt die Wahl zwischen der Deklaration von Int oder Integer lediglich davon ab, ob Null ein gültiger Wert ist oder nicht. Autoboxing (und Autounboxing) kümmert sich um alle Konvertierungsprobleme, bei denen die Anzahl einfach den einen oder anderen Typ haben muss. Die Performance wird (wie bereits erwähnt wurde) in fast allen Fällen unwahrscheinlich.

Außerdem sollte int die natürliche Wahl sein und ist wahrscheinlich die leistungsfähigste, sollte dies trotzdem ein Problem sein. Wenn Sie in der Lage sein müssen, NULL-Werte zu speichern, müssen Sie haben, um Integer zu verwenden (und sicherstellen, dass für eine Methode, die einfach Ints verwendet, keine NULL-Referenzen aufgehoben werden, da dies zu einer NullPointerException führt).

10
Andrzej Doyle

Integer ist theoretisch langsamer als int. Die Auswirkungen auf die Leistung sollten jedoch minimal sein, es sei denn, Sie zahlen die Zahlen. Auch JIT-Optimierungen reduzieren den Leistungsverlust.

Verwenden Sie diejenige, die in Bezug auf den primitiven Typ oder Referenztyp am besten zu Ihrer Situation passt.

5
Mehrdad Afshari

int ist 10x schneller als eine ganze Zahl

wir testen diesen Code mit der Jetm Performance Library

int n;
EtmPoint point1 = etmMonitor.createPoint("test:objects");
for (n = 0; n < 1000000; n++) {
    Integer t = 0;
    t = 10;
    t = 11;
}

point1.collect();
EtmPoint point = etmMonitor.createPoint("test:primitives");
for (n = 0; n < 1000000; n++) {
    int t = 0;
    t = 10;
    t = 11;
}
point.collect();

etmMonitor.render(new SimpleTextRenderer());

und die Ergebnisse:
test: objekte 10.184
test: primitives 1.151

4
Amine

Um Ihnen eine Idee zu geben, würde 2000 Integer Ihre Abfrage um etwa 0,5 ms erhöhen. Wenn Sie diese Daten serialisieren müssen, können Sie einiges mehr hinzufügen.

Die Korrektheit sollte jedoch an erster Stelle stehen. Es hat keinen Sinn, sehr schnell zu sein, aber falsch. Sie müssen Nullwerte berücksichtigen und wie Sie damit umgehen. (Wenn die Spalte NICHT NULL ist) Sie können Integer.MIN ___ VALUE oder ein long Feld anstelle von int verwenden und Long.MIN_VALUE für null verwenden. Obwohl es größer als int ist, wäre es immer noch viel kleiner und effizienter als Integer.

2
Peter Lawrey

Ich denke, es hängt unter anderem davon ab, was Sie für den Zugriff auf die Datenbank verwenden. Mit einfachem alten JDBC könnten Sie ints verwenden, während ein ORM sie ohnehin unbemerkt in Integers konvertieren könnte. Und mit Integer können Sie mit nulls umgehen.

1
agnul

int wird von Java für die meisten Berechnungen verwendet. Integer wird in allen Kollektionsformen verwendet, außer bei primitiven Arrays. 

verwenden Sie viele temporäre Integer-Werte, um den Garbage-Collector zu zerstören, und verwenden Sie im Hintergrund eine unprofilierbare CPU, die zu allgemeinen Verzögerungen bei allem führt. Wenn zu viele temporäre Dateien pro Sekunde verworfen werden, wechselt der CG in den Notfallmodus "Ich brauche jetzt Speicher", der zum Stillstand in für die Latenzzeit wichtigen Anwendungen führen kann (z. B. interaktive Echtzeitgrafik, physische Gerätesteuerung oder Kommunikation)

Wenn ich also viele verschachtelte Aufrufe habe, die keine Berechnungen durchführen, aber auf viele Sammlungen zugreifen, z. B. Schlüssel für Karten verwenden, verwende ich Integer, um massenweise automatisches Boxen zu vermeiden, wenn Argumente übergeben werden.

Wenn die Operationen mathematikintensiv sind oder als Schleifenzähler oder andere mathematikorientierte Operationen verwendet werden und nicht in Sammlungen (außer primitiven Arrays) gespeichert werden, verwende ich das Primitiv. Dasselbe gilt für alle anderen Grundelemente außer String, bei dem es sich um ein vollwertiges Objekt handelt.

1
peterk

Wenn Sie nach einem null-Wert suchen möchten, ist Integer am besten. Wenn Sie jedoch die ganze Zahl vergleichen möchten, ist int möglicherweise besser. Im folgenden Beispiel verwende ich die Ganzzahl c = 1000 und d = 1000 und vergleiche es mit false, aber im Fall von int geben sie true zurück.

public class IntegerCompare {

    public static void main(String[] args) {
        int a = 1000;
        int b = 1000;

        Integer c = 1000;
        Integer d = 1000;

        if (a == b) {
            System.out.println("int Value Equals");

        }
        if (c == d) {
            System.out.println("Integer value Equals");

        } else {

            System.out.println("Integer Value Not Equals");
        }
    }
}
0
Pankaj Singla

int kann nicht mit String oder (String) in toString umgewandelt werden.

Integer kann mit String oder (String) in toString umgewandelt werden und null verarbeiten.

0
Deepak

Ein abzudeckendes Szenario wäre die Validierung.

Stellen Sie sich vor, wir haben folgende Klasse:

class Foo{
    @Min(value = 10)
    int val;
}

Wenn der Benutzer in der Anforderung keinen Wert für val angibt, wird eine böse NumberFormatException ausgegeben.

Wenn int durch Integer ersetzt wird, können wir @NotNull verwenden und dieses Problem eleganter lösen.

0
Ramanlfc