why is `matches` better than `==` ?