Shouldn't we do a compatible? check here and return true / false directly in that case? The primitive failure path is probably more expensive and I can imagine often strings being compared that are ASCII and UTF-8.