Czy w Java np. equals albo equalsIgnoreCase to metody?

0

Cześć, chciałbym się zapytać czy w Java słowo "equals", które służy do porównywania napisów i inne tego rodzaju różne słowa, które coś robia, zwracają itp. to są po prostu metody?

0

Są to po prostu metody. Obydwie zwracają wartość typu boolean, true jeśli np. porównany ciąg znaków jest identyczny. equals zwraca uwagę na wielkość liter, equalsIgnoreCase ignoruje wielkość liter.

2

Equals to metoda jak każda inna, tyle że domyślnie występuje w klasie Object, a co za tym idzie w każdej klasie. Domyślna implementacja equals (czyli ta istniejąca w klasie Object) zachowuje się tak samo jak operator == (tzn nie porównuje zawartości obiektu tylko zawartość referencji do obiektu). String ma nadpisanego (override) equalsa i jego implementacja porównuje zawartość Stringów.

0

Dzięki. Zastanawia mnie jeszcze jak działa metoda compareTo. Znalazłem w notatkach, że porównuje na zasadzie większy, mniejszy według kodu ASCII. "ala" jest większe od "adam", tylko nie wiem czemu, bo w sumie zaczynają się od tej samej litery, ale "l = 97" a "d = 100", więc dlaczego l > d?

0

compareTo porównuje leksykograficznie, a więc porównuje znak po znaku (tzn znaki na tych samych indeksach).

Popatrzyłem na https://www.asciitable.com/ i tam jest pokazane iź kod ASCII dla 'd' to 100, a kod ASCII dla 'l' to 108. compareTo działa więc OK.

Gwoli ścisłości to compareTo porównuje znaki w UTF-ie, a nie ASCII, gdyż Javowe stringi są zbudowane z charów, a jeden char to 16-bitowa liczba reprezentująca znak w UTF-16. Czasami pojedynczy znak z Unicode nie mieści się w pojedynczym charze i jest podzielony na surogaty. To sprawia problemy przy wyliczaniu długości Stringa i indeksowania w nim.

0

@Wibowit: Masz racje, dzieki. Pomyliło mi się i napisałem "l = 97" a patrzyłem w tabeli na a.

0

Swoją drogą warto znać wszystkie dostępne metody z różnych klas czy tylko te najpopularniejsze?

0

Zależy czy masz dobrą pamięć :) U mnie rycie na blachę sprawdza się co najwyżej średnio. Łatwiej zapamiętuję funkcje, gdy ich po prostu używam do konkretnego zadania.

Zamiast ryć na blachę polecam nauczyć się obsługi własnego IDE, które powinno nie tylko podpowiadać dostępne metody w klasach, ale także pokazywać ich dokumentację, a nawet robić obie rzeczy jednocześnie, tzn pokazywać dokumentację obok listy podpowiedzi. Często tak robię, że jak mam coś zrobić z obiektem (Stringiem, kolekcją, etc) to wtedy odpalam podpowiadanie metod oraz pokazywanie obok dokumentacji i wtedy czytam sobie co robią metody i zastanawiam się nad optymalnym rozwiązaniem problemu (czyli wykonaniu operacji na omawianym Stringu, kolekcji, etc).

0

Mam jeszcze jedyno pytanie. Nie rozumiem co gościu na zajęciach chciał nam pokazać, trochę masło maślane wyszło jak zapisywałem to co mówił.

 char z2 = '3'; //pamietaj to jest znak a nie liczba 3, wiec w z2 siedzi nam
        //kod ascii tego znaku - cyfry
        int x = Character.getNumericValue(z2); //w x siedzi faktycznie 3
        System.out.println(x);

Czyli z tego wynika po prostu, że .getNumericValue zwraca mi liczbę przypisaną do znaku z2 czy co?

1

To jest właśnie dobry moment, by popatrzeć do dokumentacji. IDE powinno pokazać ci dokładnie takiego JavaDoca: link

A komentarz o tym, że w 'z2' siedzi sobie kod ASCII znaku '2' jest poprawny (tzn jest poprawny dla każdego znaku dla którego kod ASCII pokrywa się z kodem Unicode). chara możesz przypisać do inta i sprawdzić jego zawartość. Taki kod wypisuje '50':

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		char znak = '2';
		int asciiCode = znak;
		System.out.println(asciiCode);
	}
}

https://www.ideone.com/THvViZ

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