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?
Nie za bardzo rozumiem, co chcesz porównać i jak? :D
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)));
}
}
Np porównanie lista.get(0).equals(lista.get(1))
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/javase/7/docs/technotes/tools/windows/javap.html
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
zmień na new String a potem przyrównaj == . To będziesz miał różne obiekty xD