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

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

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

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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:

Kopiuj
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:

Kopiuj
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;
	}
}
atmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 913
3

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

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

Kopiuj
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
}
jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4730
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ł.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.