2013-05-12 23 views
5

Ciao mi stavo chiedendo come potrei inviare una variabile come parametro a un metodo e farlo cambiare con il metodo. Ad esempioJava modifica il valore di una variabile attraverso un metodo?

public class Main { 
    public static void main(String[] args) { 
     int i = 2; 
     doThis(i); 
     System.out.println(i); 
    } 

    public static void doThis(int i) { 
     i = 3; 
    } 
} 

Mi piacerebbe che stampasse 3 anziché 2. Grazie.

+2

L'utilizzo di Java passa per valore in modo da non poter passare in una primitiva e modificare il valore primitivo. È possibile passare in un array su numeri interi e quindi modificare gli interi nell'array o restituire un numero intero diverso. – camickr

+1

http://stackoverflow.com/questions/5614562/how-to-pass-by-reference-in-java guarda questo. – Bill

+1

http://stackoverflow.com/questions/373419/whats-the-difference-between-passing-by-reference-vs-passing-by-value –

risposta

3

vorrei che per stampare 3 invece di 2

Cambiare metodo per restituire valore

int i = 2; 
i = doThis(i); 


public static int doThis(int i) { 
    i = 3; 
    return i; 
} 

copia il valore della primitiva dal chiamante all'argomento

+2

+1, per essere il primo a restituire un valore modificando il metodo firma. – camickr

4

Java non posso farlo Tuttavia è possibile restituire il valore dal metodo ...

public static int doThis(int i) { 
    return 3; 
} 

e riassegnare esso ...

int i = 2; 
i = doThis(i); 
+0

Sì, è quello che pensavo. Hmm ... Ho fatto troppa C ultimamente. – Tommy

+1

Hmm, non sono sicuro del motivo per cui questo ha avuto un upvote dal momento che il metodo restituisce ancora nulla. – camickr

+0

Puoi creare un oggetto che ha permesso ad un metodo di ottenere e impostare il valore int (internamente all'oggetto), questo ti permetterebbe di modificare il valore int, basta modificare l'oggetto stesso – MadProgrammer

0

java è tutto di passaggio da valori. quindi non cambierà come volevi. Read here for more

Tuttavia non segue per risolvere questo problema

i = doThis(i); 

public static int doThis(int i) { 
    i = 3; 
    return i; 
} 
+0

perché giù voto? – Peeyush

+0

scusa per quello, non dovrebbe essere un downvote. Se apporti una modifica, posso annullare l'inversione di tendenza. –

+0

Il downvote è stato accidentale, ma quando provo a rimuoverlo, dice che ora è bloccato e non può essere rimosso a meno che la risposta non venga modificata. Se fai qualche piccola modifica, posso rimuovere il mio downvote. –

1

Java è passaggio per valore per il tipo di dati di base o di oggetti.
I parametri del tipo di dati di riferimento, come gli oggetti, vengono anche passati in metodi per valore.

2

Java passa tutto in base al valore, quindi se si utilizza l'operatore di assegnazione in un metodo di classe non si sta modificando l'oggetto originale.

Ad esempio:

public class Main { 
    public static void main(String[] args) { 
     Integer i = new Integer(2); 
     setToThree(i); 
     System.out.println(i); 
    } 

    public static void setToThree(Integer i) { 
     i = new Integer(3); 
    } 
} 

sta per stampare 2.

Detto questo, se l'oggetto si sta passando un riferimento a è mutevole è possibile apportare modifiche ad esso in modo che stai pensando.

Ad esempio:

public class Main { 
    public static void main(String[] args) { 
     MyMutableInt i = new MyMutableInt(2); 
     setToThree(i); 
     System.out.println(i); 
    }   

    public static void setToThree(MyMutableInt i) { 
     i.set(3); 
    } 
} 

Ciò stamperà 3 (supponendo MyMutableInt ha un metodo corretto toString()).

Ovviamente gli integri Java sono immutabili e quindi non hanno la possibilità di essere modificati in questo modo. In modo da avere 2 scelte qui:

Nota: questo non funziona con primitivi di alcun tipo. Per questo dovrai passare indietro per valore di ritorno. Se si hanno più valori da mutare, è necessario raggrupparli in un oggetto per restituirli, quindi è possibile utilizzare questo metodo.

Problemi correlati