2016-06-03 16 views
-1

Ich weiß, dass Integer in Java ein unveränderliches Objekt ist. aber ich brauche einen Weg, um eine ganze Zahl in einer Methode ändern zu können und die Änderung außerhalb der Methode zu sehen. Zum Beispiel:Ändern einer Ganzzahl in Java

int getInt(){ 
    int my_int=0; 
    test(my_int); 
} 

void test(int i){ 
    i=3; 
} 

Was will ich als die Ausgabe von getInt zu sehen ist 3 nicht 0. Gibt es eine Möglichkeit, das zu tun?

meine Methode ist komplizierter als das, was ich geschrieben habe, und es wird ein anderes Objekt zurückgeben. Deshalb möchte ich das int in der Eingabe ändern und nicht zurückgeben.

+0

kann dies helfen http://StackOverflow.com/a/40523/3981536 –

+0

Eine weitere Option zu den bereits angegebenen: Sie könnten eine Mitgliedsvariable innerhalb der Klasse anstelle einer lokalen Variable in der Methode haben. Dieser kann von überall aus zugänglich sein und du musst dich nicht darum kümmern. Ich gebe zu, das verdirbt irgendwie den Rest der Klasse, also würde ich lieber eine Alternative bevorzugen - * es sei denn, es gibt keinen solchen Rest, da der einzige Zweck der Klasse die Berechnung durchführt (und möglicherweise sogar danach verworfen wird)). Dann würde ich dies als einen gültigen Ansatz betrachten. – Aconcagua

Antwort

0

Sie können einfach nicht. Sie müssen es in ein Containerobjekt einfügen, das den Inhalt ändern kann. ZB:

class IntWrapper { 
    private int value; 
    .. 
} 

Oder Sie können einen neuen Wert zurückgeben und das Ergebnis es zB

int x = 10; 
x = foo(x); 

die zu Ihrem Beispiel ist grundsätzlich äquivalent zu.

+0

Dank meiner Methode ist komplizierter als das, was ich geschrieben habe, und es wird ein anderes Objekt zurückgeben. Deshalb möchte ich das int in der Eingabe ändern. – Alex

0

Es ist nicht möglich, wenn das Argument ein int Grundelement sein muss. Sie können ein AtomicReference<Integer>

AtomicReference<Integer> iRef = new AtomicReference<>(0); 
test(iRef); 

void test(AtomicReference<Integer> ref) { 
    ref.set(3); 
} 

Art eines Anti-Muster Dies ist ehrlich verwenden - es ist oft nicht super klar, bei der Methodensignatur suchen, was Ihre Werte passieren wird. Es wäre klarer, test einen Int zurückgeben, und dann etwas wie i = test(i); haben.

Verwandte Themen