Aktywne Wpisy

hitxol +134

Wraczek +225
Strajk czy nie, smutne jest to, że reszta społeczności wyśmiała tą idee.
Moderatorzy wykopu na was plują, banują z czapy bez uzasadnienia, teraz afera z multikontami, a wy?
Ja chce jeszcze raz xDDD
I konieczne trzeba pocisnąć tym którzy chcieli w jakikolwiek sposób temu zaprotestować.
Syndrom niewolnika ha-tfu.
#wykopgate20
Moderatorzy wykopu na was plują, banują z czapy bez uzasadnienia, teraz afera z multikontami, a wy?
Ja chce jeszcze raz xDDD
I konieczne trzeba pocisnąć tym którzy chcieli w jakikolwiek sposób temu zaprotestować.
Syndrom niewolnika ha-tfu.
#wykopgate20





Kolejna zagadka:
Kod:
String qwerty = "qwerty";
int 12345 = 12345;
String qwerty12345v1 = "qwerty12345";
String qwerty12345v2 = "qwerty" + 12345;
String qwerty12345v3 = qwerty + 12345;
System.out.println(qwerty12345v1 == qwerty12345v2);
System.out.println(qwerty12345v2 == qwerty12345v3);
Pytanie:
1.Co się wypisze?
2.CZEMU się tak wypisze?
Odpowiedź tylko na pierwsze się nie liczy
Pytanie dodatkowe* (z gwiazdką):
Co zrobić żeby oba porównania dały "true"? Należy wymienić 2 (słownie dwa) sposoby aby to zrobić. NIE można modyfikować części kodu przed printami ani rażąco zmieniać logiki.
np. System.out.println(true) ani System.out.println(qwerty12345v1 == qwerty12345v1) nie będą się liczyć
Trudność polega na tym, że to nie mogą być losowe 2 sposoby, tylko dokładnie takie jakie sobie wymyśliłem. Jak macie więcej pomysłów niż 2, piszcie każdy
Dodatkowe zasady:
Nie robimy bruteforce'a w komentarzach z wszystkimi możliwymi rozwiązaniami licząc że któreś będzie prawidłowe.
Pierwsza prawidłowa odpowiedź - punkt (na prawidłową odpowiedź nie wystarczy strzelić w output, trzeba napisać czemu tak się stało)
Pierwsza prawidłowa odpowiedź na pytanie dodatkowe - punkt
Za zgarnięcie punktu za pytanie podstawowe i dodatkowe - bonus - 1 punkt
Czyli można zgarnąć 3, ale trzeba być pierwszym
Koniec zagadki - w zależności od ilości odpowiedzi - dzisiaj o 22.00 lub jutro o 10.00
1. Wypisze true false
2. Kompilator zoptymalizuje.
qwerty12345v2 będzie obliczone w czasie kompilacji, bo po prawej stronie przypisania mamy stałe. Stringi zostaną zebrane i zapamiętane w jednym miejscu, więc v1 i v2 będą wskazywały na ten sam adres w pamięci.
qwerty12345v3 po prawej stronie ma zmienne, więc nie zostanie obliczone w trakcie kompilacji.
*. Użyć metody Equals, a nie ==, albo porównywać hashCode()
"aaa"anew String("aaa").Komentarz usunięty przez autora
Komentarz usunięty przez autora
2. ponieważ v1 i v2 to string literals, wg java language specyfication "A string literal is always of type String" https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.5
jvm używa w przypadku string literals koncepcji string interning, więc referencje v1 i v2 będą wskazywać na ten sam obiekt. Natomiast w przypadku v3 będzie utworzony nowy obiekt ponieważ operator konkatancji wg specyfikacji zawsze tworzy nowy obiekt https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.3.3
*
- 1 użycie metody equals
- 2 porównanie wyników
Prawdiłowa odpowiedź:
true false, z tego powodu jaki napisał @badAttitude
@boo007 otrzymuje punkta, bo był pierwszy; @badAttitude też otrzymuje punkta, bo najbardziej mi się podoba jego wytłumaczenie czemu