Integer vs. int

mrbela

Bekanntes Mitglied
Hallo Leute,

ich hab mal ne echte Anfängerfrage, die sich auf ein kleines Beispiel bezieht:

Java:
	public static void main(String[] args) {
		
		Integer i = new Integer(1);
		Integer j = new Integer(1);
		
                //1
		System.out.println(i == j);
		
		j =1; i = 1;
                //2
		System.out.println(i==j);
		
		i = 128; j = 128;
                //3
		System.out.println(i==j);
	}

Ausgabe ist hier:

Java:
false
true
false

zu 1)
Ich erstelle mir zwei Objekte vom Typ Integer. Wenn ich diese vergleiche sind es ja verschiedene, daher false.

Den Rest verstehe ich nciht ganz, zumal 2 und 3 echt sehr ähnlich sind, eigtl das gleiche, nur versch. Zahlenwerte. Dennoch gibt es einen anderen Rückgabewert von boolean?!?

Wäre nett von Euch, wenn mir das einer erklären könnte.

Danke!
 

eRaaaa

Top Contributor
Hallo Leute,

ich hab mal ne echte Anfängerfrage, die sich auf ein kleines Beispiel bezieht:

Java:
	public static void main(String[] args) {
		
		Integer i = new Integer(1);
		Integer j = new Integer(1);
		
                //1
		System.out.println(i == j);
		
		j =1; i = 1;
                //2
		System.out.println(i==j);
		
		i = 128; j = 128;
                //3
		System.out.println(i==j);
	}

Ausgabe ist hier:

Java:
false
true
false

zu 1)
Ich erstelle mir zwei Objekte vom Typ Integer. Wenn ich diese vergleiche sind es ja verschiedene, daher false.

Den Rest verstehe ich nciht ganz, zumal 2 und 3 echt sehr ähnlich sind, eigtl das gleiche, nur versch. Zahlenwerte. Dennoch gibt es einen anderen Rückgabewert von boolean?!?

Wäre nett von Euch, wenn mir das einer erklären könnte.

Danke!

Weil es einen Integerpool gibt, allerdings nur für Integer < 128 (bzw -127 bis +127). Bei new Integer wird allerdings immer ein neues Objekt erstellt und nicht eins aus dem Pool genommen!(daher ist de rerste Objektvergleich false, weils nicht die selben sind, beim zweiten true weils die selben sind und beim drittne eben nicht weils wieder unterschiedliche sind weil sie nicht aus dem Pool kommen sondenr wieder neue Objekte erstellt werden. Würde da i=127, j =127 stehen, würde es wieder gehen
 

mrbela

Bekanntes Mitglied
hey,

ja, das mit equals weiß ich. Nur wird das gerade in einer Vorlesung behandelt, in der es um "Programmiertheorie" geht, also eher weg von der Praxis (und somit equals).

Java:
i = 128; j = 128;

Ist das denn das gleiche wie

Java:
i = new Integer(128);
j = new Integer(128);

(wenn ich wie oben im Bsp. vorher i und j mit einem new Integer initiert habe.

Danke für die Hilfe!
 
G

Gast2

Gast
Ja, wenn die zahl >= 128 ist dann stimmt das so.
Ansonsten wird die zahl halt aus dem pool genommen und == würde true ergeben.
 

Der Müde Joe

Top Contributor
Bei
Code:
Integer i = 128;
kommt das auto-boxing zu stande. Dabei wird
Code:
Integer.valueOf(128);
aufgerufen. Das == liefert true, weil ein IntegerCache in der Klasse Integer implementert ist, welche immer den gleichen (==) Integer zurück gibt. Darum funktionert == hier auch. Dies ist hingegen implementiertungspezifisch und kann bei einer andere Java-Version vielleicht nicht mehr vorhanden sein.

Ums auf dem Punkt zu bringen:
Objekte IMMER mit equals vergleichen. (Auch wenns in ausnahmen funktionieren würde...zB Bei String#intern() )

EDIT:
Hier noch etwas Code aus der Integer.java:
Java:
    public static Integer valueOf(int i) {
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }

EDIT2:
Sorry. Bei 128 nicht mehr. Nur von -128 bis +127.
Beim ersten mal rufst du new Integer auf --> 2 verschiedene Objekte. false
beim 2ten mal kommt das Cache zum zuge --> true.
beim 3ten mal bis zu aus dem Cache draussen --> 2 mal new --> false
 
Zuletzt bearbeitet:
G

Gast2

Gast
Es gibt zahlen die kommen häufig vor (1) und es gibt Zahlen die kommen nicht so häufig vor (643435423). Man kann also davon ausgehen dass ein Integer Objekt dass die 1 repräsentiert mehr als einmal im Programm vorkommen kann. Dann machts doch Sinn nicht jedes mal ein neues Objekt zu erzeugen sondern immer das selbe zu verwenden.
 

ARadauer

Top Contributor
/**
* Cache to support the object identity semantics of autoboxing for values between
* -128 and 127 (inclusive) as required by JLS.
*
* The cache is initialized on first usage. The size of the cache
* may be controlled by the -XX:AutoBoxCacheMax=<size> option.
* During VM initialization, java.lang.Integer.IntegerCache.high property
* may be set and saved in the private system properties in the
* sun.misc.VM class.
*/
mhn naja... niemand ist perfekt und im nachhinein lässt sich woas kaum mehr ändern..
 

mrbela

Bekanntes Mitglied
Wie sieht denn das Auto-Boxing bei Strings aus?

Mache ich einen Aufruf à la
Java:
String s = "abc"
wird dann String.valueOf("abc") aufgerufen? So wie bei Integer?

Vielen Dank!
 

Kr0e

Gesperrter Benutzer
Es wird wohl eher new String(""); aufgerufen anstatt valueOf().

String haben in der Tat eine interessante Art des Cachings. Alle konstanten Strings sind meines Wissen gecached und maunell kannst du das mit String v = ...; v.intern(); erreichen..
 

mrbela

Bekanntes Mitglied
Jetzt hab ich doch nochma ne Frage dazu:

== prüft ja auf Objektgleichheit und .equals auf Inhalt.

Zwei primitve Datentypen kann ich aber mittels == auf Inhalt prüfen.

Also könnte man sagen, dass der "=="-Operator für primitive Datentypen auf Inhaltsgleichheit prüft, oder?
 
S

SlaterB

Gast
kann man sagen, aber nicht allzu spannend, primitive Datentypen haben eher keinen 'Inhalt', der ist durch den Wert an sich festgelegt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
sserio printf integer formatting Java Basics - Anfänger-Themen 17
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
T Java Integer multiplizieren Java Basics - Anfänger-Themen 6
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
L integer Java Basics - Anfänger-Themen 6
Zeppi Integer umschreiben Java Basics - Anfänger-Themen 5
rafi072001 Integer Anomalie Java Java Basics - Anfänger-Themen 7
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V int zu Integer und String Java Basics - Anfänger-Themen 6
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
K String in Integer umwandeln Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
L String in Integer umwandeln Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
S Integer aus Array filtern Java Basics - Anfänger-Themen 4
F Referenzvariable vom Typ "Integer" definieren. (Klausuraufgabe) Java Basics - Anfänger-Themen 5
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
B Variablen integer im Array Java Basics - Anfänger-Themen 5
C Liste o.ä. erstellen mit <Integer, <Integer, String> Java Basics - Anfänger-Themen 7
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Orkanson Datentypen Integer in String umwandeln/hinzufügen Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
D Fehler: String zu Integer Java Basics - Anfänger-Themen 7
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
E Integer und Array übergeben Java Basics - Anfänger-Themen 9
W Fehler bei Integer.parseInt() Java Basics - Anfänger-Themen 4
R String in Integer Java Basics - Anfänger-Themen 11
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
J Integer in Array einlesen Java Basics - Anfänger-Themen 14
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
H Integer in Datei schreiben Java Basics - Anfänger-Themen 2
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
3 ArrayList Integer Wrapper Klasse als Ersatz für normale Arrays Java Basics - Anfänger-Themen 10
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
M Datentypen Integer und Float Konflikt Java Basics - Anfänger-Themen 3
J Integer-Werte in Array ein- bzw. auslesen Java Basics - Anfänger-Themen 7
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
C Zwei Integer Arrays "kombinieren" Java Basics - Anfänger-Themen 10
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
M Höchster Integer aus 9 Zahlen Java Basics - Anfänger-Themen 13
I Klassen Integer von BL in GUI übergeben | Fehler Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
D Datentypen Ein Integer Feld in einen String wandeln ohne Nullenunterdrückung Java Basics - Anfänger-Themen 6
R integer zahlenfolge speichern, ausgeben Java Basics - Anfänger-Themen 1
L Summer aller Integer-Zahlen im Intervall [x,y] Java Basics - Anfänger-Themen 6
K ArrayList<Integer> problem Java Basics - Anfänger-Themen 3
L Vom Benutzer eingebene Integer addieren und ausgeben. Java Basics - Anfänger-Themen 11
S integer absteigend sortieren Java Basics - Anfänger-Themen 2
S ArrayList<ArrayList<Integer>> sortieren Java Basics - Anfänger-Themen 3
T Variablen Integer in Stmt Java Basics - Anfänger-Themen 13
B gemischter string zu integer Java Basics - Anfänger-Themen 22
R Big Integer Java Basics - Anfänger-Themen 8
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
B Variablen Wertezuweisung bei integer Java Basics - Anfänger-Themen 5
J Integer Werte in Array einlesen Java Basics - Anfänger-Themen 6
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
H Integer.toString(int i) vs. String.valueOf(int i) Java Basics - Anfänger-Themen 12
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
A Integer aus Stream to Double Java Basics - Anfänger-Themen 7

Ähnliche Java Themen


Oben