clean hashcode equals toString