Wątek przeniesiony 2018-02-28 14:42 z Java przez ŁF.

Pierwszy kod działa, a drugi nie – dlaczego?

0

Jestem początkującym hobbystą Javy SE i mam zagwozdkę taka ze jak napisałem własna metodę do porównania Stringów to jak jest bez skanera to działa jak dołączę skaner to juz nie
poniżej pozwalam sobie wkleić oba kody jak by ktoś podpowiedział dlaczego sie tak dzieje będę zobowiązany

kod nr 1 działający poprawnie:

public static void main(String[] args) 
	{
		String a = "dom";
		String b = "dom";
			
		sprawdzCzyRowne(a, b);
		if(sprawdzCzyRowne(a, b) == true) {System.out.print(" rowne ");}
		
		else if(sprawdzCzyRowne(a, b) != true) {System.out.print(" nie rowne ");}
		
		
	}
	public static boolean sprawdzCzyRowne(String x, String y)
	{
		if(x == y) {return true;}
		
		return false;
	}


	}

a teraz kod który nie działa:

public static void main(String[] args) 
	{
		
		Scanner skan = new Scanner(System.in);
		System.out.print(" wpisz wyraz do porownania: ");
		String a = skan.nextLine();
		System.out.print(" wpisz drugi wyraz do porownania: ");
		String b = skan.nextLine();
		System.out.print(a +" "+ b);
		
		
		
		sprawdzCzyRowne(a, b);
		if(sprawdzCzyRowne(a, b) == true) {System.out.print(" rowne ");}
		
		else if(sprawdzCzyRowne(a, b) != true) {System.out.print(" nie rowne ");}
		
		skan.close();
		
	}
	public static boolean sprawdzCzyRowne(String x, String y)
	{
		if(x == y) {return true;}
		
		return false;
	}
}
3

== sprawdza czy A i B to ten sam obiekt.

Do porównywania zawartości używa się .equals().
Przykład:

public static boolean czyRowne(String a, String b) {
	return a.equals(b); // Zwraca true jeżeli a i b mają taką samą wartość, w przeciwnym razie false
}
2

Technicznie to fakt, że pierwszy kod działa jest dziwny i wynika ze sposobu działania kompilatora javy, który wyszukuje takie same stringi w kodzie i inicializuje je jako jeden obiekt. I tylko dlatego == działa. Ale to tylko wyjątek od reguły.
Stringi należy w Javie porównywać tylko przez equals tak jak **atmal **napisał.

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