Aktywne Wpisy

Salido +1558
Minął 0. (z 66) dzień wakacji.
To już 7. edycja smutnej akcji wakacyjnego publikowania map śmiertelnych wypadków w wakacje.
Tak jak w ostatnich latach, postaram się codziennie wrzucać mapę, listę wypadków i statystyki pod tag #smiertelnewypadki (na ile pozwoli mi praca i inne obowiązki). Postaram się także porównywać liczby z tymi w poprzednim roku.
Kilka liczb z podsumowania wakacji 2024:
To już 7. edycja smutnej akcji wakacyjnego publikowania map śmiertelnych wypadków w wakacje.
Tak jak w ostatnich latach, postaram się codziennie wrzucać mapę, listę wypadków i statystyki pod tag #smiertelnewypadki (na ile pozwoli mi praca i inne obowiązki). Postaram się także porównywać liczby z tymi w poprzednim roku.
Kilka liczb z podsumowania wakacji 2024:
źródło: 1-452590_g
Pobierz
kopek +280
Kto pamieta ten super odtwarzacz tzw. "empetrójke" :) i pobieranie muzyki na kazoo lub eMule? Xd
Ja później mialem jeszcze jakąś słabą "empeczwórke " - to byl dopiero luksus xd
#gimbynieznajo #nostalgia
Ja później mialem jeszcze jakąś słabą "empeczwórke " - to byl dopiero luksus xd
#gimbynieznajo #nostalgia
źródło: FB_IMG_1751014175815
Pobierz




1. Podstawowa implementacja metody equals w klasie Object sprawdza czy referencje są takie same.
Czyli object1.equals(object2) zwroci true tylko jesli obie zmienne będą wskazywały na ten sam adres w pamięci.
Czyli np. Gdy zrobimy Klasa object1 = new Klasa(); Klasa object2 = object1;
Jak sprawdza czy są równe? Przez operator porównania return (this == obj);
Wyjątkiem są tutaj klasa String i klasy opakowujące jak Integer, Double, metoda equals w tych klasach jest nadpisana i sprawdza zawartosc.
PYTANIE: dlaczego w takim razie operator porównania nie zwraca true, skoro gdzieś czytałem, ze jeśli 2 stringi są równe pod względem zawartości to referencje wskazują na to samo miejsce w pamięci?
2. Jeśli chcemy sprawdzić czy dwa obiekty są równe pod względem zawartości, musimy nadpisać metodę equals() i napisać tam pod względem jakich pól chcemy obiekty porównywać.
3. Jeśli nadpisujemy equals musimy nadpisac metodę hashcode(zgodnie z kontraktem). Jeśli nie nadpiszemy to nie będziemy mogli używać poprawnie zbiorów, hashmapy itp.
PYTANIE: co jeśli nie korzystamy z obiektów jako np. kluczy w zbiorze? Można złamać kontrakt? Metoda equals będzie działała bez napisania hashcode?
4. PYTANIE: W drugą stronę, co jeśli nadpiszemy hashCode a nie nadpiszemy equals. Jak zachowa się hashmapa?
5. Operator porównania „==” używamy do porównania typów podstawowych aby sprawdzić czy są równe, a w przypadku obiektów sprawdzamy czy są równe referencje. (zresztą tak wygląda metoda equals z klasy Object)
#naukaprogramowania #java
Maja ta sama referencje, == zadziala
String c = "lol"
String b =
hashcode jest intem, ktory zbiera wiedze o obiekcie do kupy i mowi ci o nim wszystko, tak jak go widzisz. Jak porownujesz dwoch Jankow Kowalskich to bedzie true.
Equals bierze pod uwage pozycje obiektu w pamieci, wiec jak porownasz (Usera) Janka Kowalskiego i nowego (Usera) Janka Kowalskiego to sie nie beda zgadzac.
@nick230: nie zawsze
String str1 = "test";
String str2
@variableisnotinitialized: jak to nie mają, oczywiście że to ta sama referencja. Ludzie douczcie się zanim udzielacie rad, to jest na pierwszych stronach książek o Javie.
@Hatespinner: ale moze sie zdarzyc ze porownujac Janka i Karyne bedzie true, w ogole troche chyba sam nie ogarniasz tego.
A co do ogarniania to przyznam ci racje jak mi pokazesz nowszy certyfikat Javy od Oracla niz moj. ; )
To tez bujda, equals sprawdza wartosci
Czyli
Object1 o1 = new Object1();
Object1 o2 = new Object1();
Ad. 1 W javie ze względu na oszczędności pamięci zaimplementowane zostały dla niektórych klas (koniecznie immutable) tzw. poole. I tak String ma String pool w którym przechowywane są wszystkie Stringi. Jeżeli będziemy porównywać przy pomocy == stringi które znajdują się w tym poolu to dostaniemy wartość true. Problem polega na tym, że nie możemy być tego pewni. Programista może wymusić utworzenie Stringa poza poolem przy pomocy konstruktora new String("").
to zdanie to jakiś bełkot, co to znaczy że "int zbiera wiedze o obiekcie do kupy", co to znaczy że "będzie
@sakfa nie jestem nauczycielem
Co to znaczy 'praktycznie kazdym normalnym srodowisku'? lel
@nick230: Bardzo dobrze wiedzieć jak to wszystko dokłądnie działa, ale w praktyce zazwyczaj się albo generuje tego typu metody (większość IDE ma taką możliwość), albo (lepiej) używa się narzędzi typu Lombok, które automatycznie dołączają wygenerowane metody equals+hashcode podczas kompilacji.
Czemu
@Mirkostatbot: jak w IDE (eclipse/idea) wygląda wsparcie dla Lomboka i refactoringu? Jeśli mamy jakieś pole klasy i używamy lombokowych adnotacji, a później zauważamy, że w nazwie zrobiliśmy literówkę lub chcemy całkiem zmienić nazwę tego pola to IDE automatycznie poprawi wszystkie wystąpienia getterów w kodzie, czy trzeba to jakoś obchodzić?
Druga rzecz, jest jakieś obejście wstawiania breakpointów na poziomie settera/gettera?
Trzecie chyba najważniejsze jak to się ma