2013-05-12 34 views
5

Witam Zastanawiam się, w jaki sposób będę mógł wysłać zmienną jako parametr do metody i zmienić ją za pomocą metody. Na przykład:Java zmienia wartość zmiennej za pomocą metody?

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; 
    } 
} 

Chciałbym wydrukować 3 zamiast 2. Dziękuję.

+2

Używanie języka Java przebiega według wartości, więc nie można przekazać prymitywu i zmodyfikować wartości pierwotnej. Możesz przekazać tablicę na liczbach całkowitych, a następnie zmodyfikuj liczby całkowite w tablicy lub zwróć inną liczbę całkowitą. – camickr

+1

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

+1

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

Odpowiedz

3

Chciałabym to wydrukować 3 zamiast 2

Zmień sposób, aby powrócić wartość

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


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

kopiuje wartość prymitywny od rozmówcy do argumentu

+2

+1, za to, że jako pierwszy zwraca wartość modyfikując metodę podpis. – camickr

4

Java nie mogę tego zrobić. Jednak można zwrócić wartość z metody ...

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

i przypisać ją ...

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

Tak, tak myślałem. Hmm ... Robiłem ostatnio zbyt dużo C. – Tommy

+1

Hmm, nie jestem pewien, dlaczego to się stało, ponieważ metoda wciąż jest nieważna. – camickr

+0

Można utworzyć obiekt, który umożliwiłby metodę uzyskania i ustawienia wartości int (wewnętrznie do obiektu), co pozwoliłoby zmodyfikować wartość int, wystarczy zmodyfikować sam obiekt. – MadProgrammer

0

java jest o mijają wartości. więc nie zmieni się tak, jak chciałeś. Read here for more

jednak zrobisz następujące czynności, aby rozwiązać ten problem

i = doThis(i); 

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

dlaczego głosować w dół? – Peeyush

+0

Przepraszam za to, nie powinno to być zdanie. Jeśli dokonasz edycji, mogę cofnąć test. –

+0

Downvote był przypadkowy, ale kiedy próbuję go usunąć, mówi, że jest teraz zablokowany i nie można go usunąć, chyba że odpowiedź zostanie zmieniona. Jeśli dokonasz drobnej zmiany, mogę usunąć moje zgłoszenie. –

1

Java jest podanie przez wartość dla prymitywnego typu danych lub obiektów.
Parametry typu danych odniesienia, takie jak obiekty, są również przekazywane metodami według wartości.

2

Java przekazuje wszystko według wartości, więc jeśli użyjesz operatora przypisania w metodzie klasy, nie zmienisz oryginalnego obiektu.

Na przykład:

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); 
    } 
} 

zamierza drukować 2.

Mimo, że jeśli obiekt jesteś przejazdem w odniesieniu do jest zmienny można dokonać w nim zmian w sposób oni o czym myślisz.

Na przykład

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); 
    } 
} 

Drukuje 3 (zakładając MyMutableInt jest sposób prawidłowy toString()).

Oczywiście liczby całkowite Java są niezmienne, a więc nie można ich tak zmienić. Więc masz 2 opcje tutaj:

Uwaga: to nie działa w przypadku jakichkolwiek elementów pierwotnych. W tym celu będziesz musiał przejść z powrotem przez wartość zwrotu. Jeśli masz wiele wartości do zmutowania, musisz zawinąć je w obiekt, aby je zwrócić, więc możesz również użyć tej metody.

Powiązane problemy