Porównywanie obiektów w Javie

2018-12-07 15:36
0

Mam kilka obiektów Integer 1 w liście (lista[1,1,1,1]) i jeśli je porównam to hashcode i equals zwrócą True, i tutaj moje pytanie, czy jest jakaś funkcja która je porówna (pod innym kątem) i zwróci false?

edytowany 1x, ostatnio: Mattii4211, 2018-12-07 15:37

Pozostało 580 znaków

2018-12-07 16:10
0

Nie za bardzo rozumiem, co chcesz porównać i jak? :D


Nie pomagam przez PM. Pytania zadaje się na forum.
Jedną jedynkę dodał do listy rano, drugą po południu, a trzecią odczytał z pliku. To to są chyba różne jedynki? - bogdans 2018-12-07 16:11
Właśnie najlepiej jakby się dało je porównać czasem dodania. - Mattii4211 2018-12-07 16:32
@bogdans: @Mattii4211: idea ta z pewnością zostanie odnotowana w historii, w 100 lat po Einsteinie drugie równie genialne odkrycie 1!=1 - AnyKtokolwiek 2018-12-07 16:38
Zgadzam się ze @scibi92, tu chodzi o konglomerat integera plus 'coś', 'opakowanie', 'koperta' - AnyKtokolwiek 2018-12-07 16:39
@AnyKtokolwiek: o ironii słyszałeś? - bogdans 2018-12-07 16:47

Pozostało 580 znaków

2018-12-07 16:33

Zobacz sobie System.identityHashCode:

public class Jedynki {
    public static void main(String[] args) {
        List<Integer> aList = Arrays.asList(new Integer(1), new Integer(1), 1,1);
        aList.forEach(x -> System.out.println(System.identityHashCode(x)));
    }
}
edytowany 1x, ostatnio: yarel, 2018-12-07 16:45
Jeśli obiekty są równe to mają ten sam hashcode - Mattii4211 2018-12-07 16:41
Widzisz jakąś różnicę między hashCode a identityHashCode ? - yarel 2018-12-07 16:42
Ok, teraz widzę - Mattii4211 2018-12-07 16:44
no tak, z tym się zgodzę, ale to i tak jest pewna obfuskacja - trojanus 2018-12-07 16:52

Pozostało 580 znaków

2018-12-07 16:34
0

Np porównanie lista.get(0).equals(lista.get(1))

Pozostało 580 znaków

2018-12-07 16:48
0

tzn. że jak? można porównywać obiekty, lecz jak masz upakowane na liście obiekty, to nie da się porównać ich hashcodów bo w zasadzie to co będziesz porównywał, to ich typy a nie obiekty z których są zrobione. Czyli jak masz lista[1, 1, 1, 1] i wszystkie są typu Integer to masz wynik true. Jak dla mnie to jest wtedy typ a nie obiekt Integer. No chyba, że są jakieś magiczne zaklęcia na to. Jedyny sposób, żeby to sprawdzić to zdekompilować wyprodukowany plik .class, do tego można użyć javap. https://docs.oracle.com/javas[...]otes/tools/windows/javap.html


Panie Żurawiecki, projektowanie to nie jest sprzedawanie pietruszki. Do widzenia Panu.

Pozostało 580 znaków

2018-12-07 16:57
0

konkretnie to mam listę obiektów pewnej klasy i w moim wypadku identityHashCode w zupełności wystarczy. Te 1 były tylko dla przykładu, sorry jak troszkę zamieszałem przez to

edytowany 2x, ostatnio: Mattii4211, 2018-12-07 17:25

Pozostało 580 znaków

2018-12-10 15:25
0

zmień na new String a potem przyrównaj == . To będziesz miał różne obiekty xD

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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