Integer in Collection speichern



  • Java-Progger schrieb:

    Ich versteh die Designer der Java-API manchmal nicht, da sind die Interface total aufgebläht, aber an wirklich fundamentalen Dingen mangelt es dann doch.

    Ansichtssache. Die Entscheidung Wrapper-Klassen imutable zu machen
    halte ich schon für sinnvoll. Ansonsten wird keiner gevierteilt, wenn
    er seine eigene kleine Wrapper-Klasse schreibt. 🕶



  • BigInteger is übrigens auch immutable 🙄



  • Ab (afaik) 1.6 unterstützt Java folgendes:

    Map<Integer, Integer> foo = new HashMap<Integer, Integer>();
    		foo.put(4, 3);
    		int var = 6;
    		foo.put(5, var);
                    Integer i = foo.get(5);
    		foo.put(7, new Integer(9));
    		int var2 = foo.get(7);
    		System.out.println(foo);
    		System.out.println(var2);
    

    Ausgabe:

    {4=3, 5=6, 7=9}
    9
    


  • Ja, Autoboxing... Ändert nichts daran, dass es natürlich dennoch auf Integer gewandelt wird und damit weiter immutable bleibt.



  • Was ist eigentlich dein Problem mit immutable? Ein "int" kannst du auch nicht verändern, du kannst einer int-Variable höchstens einen neuen Wert zuweisen (das hat aber keine Auswirkungen auf andere int-Variablen). Ein "int" hat auch ein immutable-Verhalten.



  • JBeni schrieb:

    Was ist eigentlich dein Problem mit immutable? Ein "int" kannst du auch nicht verändern, du kannst einer int-Variable höchstens einen neuen Wert zuweisen (das hat aber keine Auswirkungen auf andere int-Variablen). Ein "int" hat auch ein immutable-Verhalten.

    Was ist dann ein Beispiel für ändern?



  • Point p = new Point();
    
    p.setX(42);
    

    Dadurch wird der Inhalt von p geändert.



  • Wenn ich einem int einen neuen Wert setzte wird es aber auch geändert. Da wird ja kein neues int erzeugt.



  • Javaner schrieb:

    Point p = new Point();
    
    p.setX(42);
    

    Dadurch wird der Inhalt von p geändert.

    Besser ist vllt. folgender Vergleich:

    Point p1 = new Point();
    Point p2 = p1;
    p2.setX(42);
    

    Dadurch wird p1 und p2 geändert.

    int i1 = 42;
    int i2 = i1;
    i2 = 43;
    

    Ändert nur i2.



  • Dasd schrieb:

    Point p1 = new Point();
    Point p2 = p1;
    p2.setX(42);
    

    Dadurch wird p1 und p2 geändert.

    Hier wird beim set weder p1 noch p2 verändert, sondern der Inhalt des Objektes auf das p1 und p2 zeigen. Ein int ist aber kein Objekt.


Anmelden zum Antworten