<div dir="ltr">Hi Andrey,<div><br></div><div>This is best discussed in the core-libs mailing list.</div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature">Cheers,<br>Martijn</div></div>
<br><div class="gmail_quote">On 26 April 2016 at 10:49, Andrey <span dir="ltr"><<a href="mailto:andrey@tweak.su" target="_blank">andrey@tweak.su</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Hello! </div><div><div> </div><div>I read source code equalsIgnoreCase(...) in String class<span> </span><span>and saw that</span><span> </span><span>it is not</span><span> </span><span>optimal. This method check length and call regionMatches(...)  with 'constant' values</span></div><div> </div><div><a href="http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1095" target="_blank">http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1095</a> </div><div><p>...</p><p>   && (anotherString.value.length == value.length)<br>    && regionMatches(true, 0, anotherString, 0, value.length);<br>...</p><p>But regionMatches(...) check 'constant' values</p><p><a href="http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1338" target="_blank">http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1338</a></p><p>// Note: toffset, ooffset, or len might be near -1>>>1.<br> if ((ooffset < 0) || (toffset < 0)<br>    || (toffset > (long)value.length - len)<br>    || (ooffset > (long)other.value.length - len)) {<br>  return false;<br> }</p><p>and increment equalent variables to==po in loop</p><p><a href="http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1344" target="_blank">http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1344</a></p><p>while (len-- > 0) {</p><p>  char c1 = ta[to++];</p><p>  char c2 = pa[po++];</p><p>...</p><p>}</p><p>and use if(...) in while loop</p><p><a href="http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1349" target="_blank">http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/String.java#l1349</a></p><p>if (ignoreCase) {</p><p>...</p><p>}</p><p> </p><p><span><span>May be</span><span> </span><span>can create optimized</span> regionMatches(...) for use in equalsIgnoreCase(...)?</span></p></div></div></blockquote></div><br></div>