# Überschreibung des Integer-Wert



## netrobot (20. Dezember 2005)

Integer X = new Integer(10);
wie kann ich Integer X neuen Wert zuweisen?
es muss in der selben Adresse sein, wo 10 gespeichert ist.
Nicht etwa X = new Integer(12);


----------



## Thomas Darimont (20. Dezember 2005)

Hallo!

 Das geht nicht (legal)...  Integer ist immutable also unveraenderlich. (Jedoch kann man immernoch per Reflection den gekapselten Wert aendern, das macht man so aber nicht...)

 Gruss Tom


----------



## netrobot (20. Dezember 2005)

In der Praxis z.B. ich habe ein bitmap, per loadimage () kann ich das Image laden, und will jetzt einen Pixelwert an einer bestimmten Stelle ändern, und dann speichern. Da Pixelwert ist einfach ein integer, daher muss ich nur einen Wert ändern, und alle Pixeln unberührt so lassen. Und zum Not muss ich das Image komplett neu erzeugen, aber es verbraucht zuviel Speicherplatz.


----------



## Thomas Darimont (20. Dezember 2005)

Hallo!

 Dann gibts sicherlich auch eine Moeglichkeit  entweder den Pixelwert direkt zu setzten setRGB(x,y) oder zumindest mal an ein (primitives) byte[] oder int[] Array heranzukommen und dort direkt die gewuenschten Aenderungen vorzunehmen. Dafuer die Wrapper Klassen zu verwenden "is not very savvy"...

 Gruss Tom


----------



## netrobot (21. Dezember 2005)

noch ein Beispiel:

```
public class Test{
     public void ChangeValueOf (Integer x){
                  ...
    }
    public static void main (String [] args){
       int a = 10;
       ChangeValueOf(a);
      }
```
1. es funktioniert nicht, weil a ist Type int, x ist Integer. Ich moechte parameter als call by reference, aber bei primitiven Typen, java betrachtet die immer als call by value. Ich muss es in Object convertieren.
2. wenn es klappen wuerde, ich kann immer den Inhalt in x nicht aendern.


----------



## deepthroat (21. Dezember 2005)

Hi.

Warum willst du denn überhaupt unbedingt call by reference nutzen? Deine Funktion sollte einfach einen neuen Wert berechnen und zurückgeben, den du dann gleich an x zuweisen kannst.

Gruß


----------



## netrobot (21. Dezember 2005)

dann nehmen wir an, es gibt 2 parameter, die beiden veraendert werden sollen


----------



## deepthroat (21. Dezember 2005)

Gut, dann nehmen wir an das der Rückgabewert der Funktion ein Array (bzw. ein anderer Kontainer) mit 2 Werten ist.

Gruß


----------



## netrobot (21. Dezember 2005)

Es geht nicht um die Übergabe der Parameter, sondern was passiert nach der Übergabe. Ich habe den Wert in Funktion "ChangeValueOf()", wie kann ich den Inhalt von X ändern. Laut vorherigen Einträgen darf ich den Inhalt überhaupt nicht ändern, es ist irgendwie komisch


----------



## deepthroat (21. Dezember 2005)

Ich habe auch nicht von der Parameter-Übergabe gesprochen, sondern von der Rückgabe von der Funktion. Du mußt doch nicht die Werte innerhalb der aufgerufenen Funktion ändern. Du kannst doch die Werte der Variablen ändern wenn du Funktion zurückgekehrt ist.

Gruß


----------



## Thomas Darimont (21. Dezember 2005)

Hallo!

 1) In Java gibt es kein Call by Reference... alles in Java wird per Value uebergeben auch Referenzen (und nein, dass ist dann kein Call by Reference...).
  2) In Java gibt es keine Funktionen sondern nur Methoden.
 3) int und Integer sind zwei paar Schuhe (was durch Autoboxing in Java 5 verschleiert wird)
  4) Lies mal ein Java Buch.

  Gruss Tom


----------



## netrobot (21. Dezember 2005)

Thomas Darimont hat gesagt.:
			
		

> Hallo!
> 
> 1) In Java gibt es kein Call by Reference... alles in Java wird per Value uebergeben auch Referenzen (und nein, dass ist dann kein Call by Reference...).
> 
> Gruss Tom


wozu ist eine Referenz->per Referenz kann ich Variablewert verändern, wenn eine Referenz per call by value übergeben wird, dann erzeugt der Compiler eine Kopie von dieser Referenz.
Was ich danach mit dieser Kopie tue, verändert die Referenz doch nicht.


----------



## Thomas Darimont (21. Dezember 2005)

Hallo!

 Schau mal hier:
http://www.tutorials.de/tutorials228724.html&highlight=Call+reference

 Gruss Tom


----------



## netrobot (22. Dezember 2005)

danke euch. Jetzt verstehe ich, Integer wurde so gekapselt, dass man überhaupt keine interne Zustaende aendern darf. Es laesst nur durch eine Wrapper-Klasse realisieren.
1. Es gibt in Integer nur get-Methode ohne set-Methode, warum?
2. Es wird natuerlich viel besser, wenn java eine art Wrapper-template bietet.


----------



## Thomas Darimont (22. Dezember 2005)

Hallo!

 Wie schon zuvor gesagt, die Wrapper fuer Primitive Typen sind Immutable.
http://mindprod.com/jgloss/immutable.html

 Gruss Tom


----------



## netrobot (22. Dezember 2005)

```
Bei der Parameterübergabe hat man also zwei Referenzen,
die auf dasselbe Objekt zeigen. ... Also: In Java werden Parameter 
immer per call-by-value übergeben. Auch Referenzen. 
Bei veränderbaren Objekten sind Veränderungen in der Methode 
auch beim Aufrufer sichtbar. Bei unveränderbaren Typen, 
wie beispielsweise primitiven Datentypen und Strings, merkt 
der Aufrufer nichts. Bei solchen unveränderlichen Typen könnte 
man eine Veränderung durch einen Wrapper nach außen tragen. 
Das ist vom Design her allerdings wahrscheinlich keine gute Lösung…
```
d.h. 
wenn ich definiere :

```
MyClass MyObj = new MyClass();
```
definiere ich eigentlich eine Referenz.


----------

