don't create a new obj when comparision, and no need to upcast