I have a method that checks if two objects are equal(by reference).
public boolean isUnique( T uniqueIdOfFirstObject, T uniqueIdOfSecondObject ) {
    return (uniqueIdOfFirstObject ==  uniqueIdOfSecondObject);
}
(Use case) Assuming that I don't have any control over creation of the object. I have a method
void currentNodeExistOrAddToHashSet(Object newObject, HashSet<T> objectHash) {
    // will it be 100% precise? Assuming both object have the same field values.
    if(!objectHash.contains(newObject){
        objectHash.add(newObject);
    }
}
or I could do something like this
void currentNodeExistOrAddToHashSet(Object newObject, HashSet<T> objectHash){
    //as per my knowledge, there might be collision for different objects.
    int uniqueId =  System.identityHashCode(newObject);
    if(!objectHash.contains(uniqueId){
        objectHash.add(uniqueId);
    }
}
Is it possible to get a 100% collision proof Id in java i.e different object having different IDs, the same object having same ids irrespective of the content of the object?
 
     
    