Zmiana zmiennej w funkcji

0

Witam,
Czy w Javie istnieje możliwość zmienienia wartości zmiennej w ciele funkcji ??? np:


void zmien(int a){
        a=9;
}


int a=0;
zmien(a);   
System.out.println(a);   //tutaj wypisuje 9

w c++ jesli argument przekazany jest przez referencje moze byc zmieniony w ciele funkcji. w javie podobno zawsze jest przekazywany przez referencje wiec dlaczego sie nie zmienia P Jesli ktos wie jak to zrobic to prosze o pomoc.
pozdrawiam

0

a po co Ci zmieniac zmienne lokalne w funkcji? nie widze w tym zadnej funkcjonalnosci...

0

Z tego co wiem, to w Javie parametry zawsze są przekazywane przez wartość, dlatego zmiany dokonane w ciele funkcji nie będą widoczne poza nią. Należy jednak pamiętać, że w przypadku obiektów przekazywana jest referencja. Z tego wynika, że w przypadku typów podstawowych wartość zmiennej po wywołaniu takiej funkcji nie zmieni się, ale w przypadku obiektów będzie inaczej. Wystarczy wywołać wewnątrz funkcji metodę modyfikującą pole naszego obiektu, i zmiany będą widoczne poza tą funkcją. Megabanalny przykład:

public class A {
  
  private int a;
  
  public A(int a) {
    this.a = a;
  }
  
  public void setA(int a) {
    this.a = a;
  }
  
  public int getA() {
    return this.a;
  }
  
  public String toString() {
    return String.valueOf(this.a);
  }
  
}

I kod obsługujący przykładową klasę:

public class Main {

  public static void zmien(A a) {
    a.setA(4);
  }
  
  public static void main(String[] args) {
    A a = new A(3);
    System.out.println(a);
    zmien(a);
    System.out.println(a);
  }

}
0

Przypominam tylko, ze istnieje klasa opakuwujaca typ int i nazywa sie Integer...

0

Przypominam tylko, ze obiekty tej klasy sa immutable i nic to nie zmienia...

0

O sorki.. [wstyd]

0

dzięki renIO Twoim sposobem mogę łatwo ominąć mój problem, na najprostsze rozwiązania najtrudniej wpaść :P

przy okazji zapytam o jakiś fajny kontener w którym mógłbym sobie trzymać listę np tytułów książek, coś jak textArea ale żeby można było w niej zaznaczyć pozycje i później zrobić cos z ta konkretna pozycja

np mam listę:

Nasza szkapa
Rogaś z Doliny Roztoki
11 minut
C++ księga eksperta

zaznaczam "11 minut" klikam na przycisk i usuwam ta pozycje z listy.

zawsze mam klopot zeby powiedziec o co mi chodzi :P ale mam nadzieje ze ktos zrozumie ;)

0

JList służy do takich rzeczy. Szczegółów poszukaj na:http://java.sun.com/docs/books/tutorial/uiswing/index.html

0
renIO napisał(a)

Z tego wynika, że w przypadku typów podstawowych wartość zmiennej po wywołaniu takiej funkcji nie zmieni się, ale w przypadku obiektów będzie inaczej.

Niestety wyrażasz się troszkę nieprezyzyjnie (a wiadomo co tkwi w szczegółach [diabel]) gdyż wszystkie parametry w javie przekazywane są przez wartości także obiekty .
Dowód :
<font size="1">

public class Main
{				
	public static void wartosciowaMetoda(Integer a)
	{
	   a = new Integer(1);
	}
	
	public static void main(String[] args)
	{
		Integer b = new Integer(0);
		wartosciowaMetoda(b);
		System.out.println(b);	//wypisze 0	
                b=null;
		wartosciowaMetoda(b);
		System.out.println(b);		//wypisze null
	}
}


</span> "Referencja" w javie to unikalny identyfikator (analogicznie działający jak wskażnik w C++) . Dlatego można zmieniać wartości pól obiektu przekazanego do metody i te zmiany zostaną zachowane , natomiast obiekt(a raczej jego id) pozostaje bez zmian. To tak dla dokładności ;-P
0

Co racja to racja. Oczywiście chodziło mi o zawartość pól obiektu a nie o sam obiekt... :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1