Hello! I read source code equalsIgnoreCase(...) in String class and saw that it is not optimal. This method check length and call regionMatches(...) with 'constant' values
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1095 ... && (anotherString.value.length == value.length) && regionMatches(true, 0, anotherString, 0, value.length); ... But regionMatches(...) check 'constant' values http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1338 // Note: toffset, ooffset, or len might be near -1>>>1. if ((ooffset < 0) || (toffset < 0) || (toffset > (long)value.length - len) || (ooffset > (long)other.value.length - len)) { return false; } and increment equalent variables to==po in loop http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1344 while (len-- > 0) { char c1 = ta[to++]; char c2 = pa[po++]; ... } and use if(...) in while loop http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1349 if (ignoreCase) { ... } May be can create optimized regionMatches(...) for use in equalsIgnoreCase(...)?