Stała 'final'.

0

Witam forumowiczów.
Mam jedno drobne pytanie dotyczące modyfikatora 'final'. W podręczniku z którego korzystam i informacji z innych źródeł, wynika iż po pierwszym przypisaniu wartości do zmiennej z użyciem 'final' wartości tej nie można zmienić. Tymczasem w poniższym kodzie jest to według kompilatora możliwe. Jak to można wytłumaczyć?

class Test {
	
	static final int x=12;
	
	public void doRoboty(final int x){
		System.out.println(x);
	}
	public void doRoboty2(){
		System.out.println(x);
	}
}
public class Tester {

public static void main(String[] args){
	System.out.println("Poczatkowa wartosc = "+Test.x);
	Test a=new Test();
	a.doRoboty(5);
	a.doRoboty2();
	
}}
2

Nigdzie nie zmieniasz zmiennej final x. Zmienna zadeklarowana w klasie Test jako:

static final int x=12;

to inna zmienna niż przekazywana do metody: public void doRoboty(final int x)

 To tylko zbieżność nazw.
3
static final int x=12;
public void doRoboty(final int x){

Przecież przesłaniasz klasowe x wewnątrz metody, przez co wypisujesz parametr o nazwie x a nie pole klasy. Zmień nazwę parametru na y i odpal ponownie.

0

Dziękuje za odpowiedź. Byłem pewien że zmienna przekazywana w wywołaniu metody będzie równoznaczne z powtórnym przypisaniem wartości do 'int x'.

1
dzionny napisał(a):

Dziękuje za odpowiedź. Byłem pewien że zmienna przekazywana w wywołaniu metody będzie równoznaczne z powtórnym przypisaniem wartości do 'int x'.

Są to inne zmienne. Zmienna x przekazana do metody przesłania tą zadeklarowaną w klasie. Wtedy aby mieć dostęp w tej metodzie do zmiennej zadeklarowanej w klasie musisz użyć this. Przerób metodę tak i odpal:

 public void doRoboty(final int x){
        System.out.println(x);
        System.out.println(this.x);
    } 

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