override on hashcode, equals and tostring