Если вы скопируете код String.equals() в свою программу и сравните производительность вашего метода и настоящего, то, скорее всего, будете удивлены, как и автор вопроса: скорость вашей реализации может быть медленнее в десятки раз. JVM просто заменяет код native-реализацией, несмотря на то, что они не помечены соответствующим словом. Такие заменяемые методы называют intrinsic-методами.
Официальной информации немного. Список таких методов можно получить ковыряя исходники JVM. Тезка предложил скрипт для получения списка классов, у которых есть такие методы. Однако не все методы в них intrinsic.
$ grep do_intrinsic vmSymbols.hpp | perl -pe s/\#.*//g | perl -pe s/\\/\\/.*//g | awk '{ print $2 }' | sort | uniq | perl -pe s/_/./g | perl -pe s/,//g
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Class
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.invoke.InvokeDynamic
java.lang.invoke.MethodHandle
java.lang.invoke.MethodHandleNatives
java.lang.Long
java.lang.Math
java.lang.Object
java.lang.reflect.Array
java.lang.reflect.Method
java.lang.ref.Reference
java.lang.Short
java.lang.String
java.lang.StringBuffer
java.lang.StringBuilder
java.lang.System
java.lang.Thread
java.lang.Throwable
java.nio.Buffer
java.util.Arrays
sun.misc.AtomicLongCSImpl
sun.misc.Unsafe
sun.reflect.Reflection
Официальной информации немного. Список таких методов можно получить ковыряя исходники JVM. Тезка предложил скрипт для получения списка классов, у которых есть такие методы. Однако не все методы в них intrinsic.
$ grep do_intrinsic vmSymbols.hpp | perl -pe s/\#.*//g | perl -pe s/\\/\\/.*//g | awk '{ print $2 }' | sort | uniq | perl -pe s/_/./g | perl -pe s/,//g
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Class
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.invoke.InvokeDynamic
java.lang.invoke.MethodHandle
java.lang.invoke.MethodHandleNatives
java.lang.Long
java.lang.Math
java.lang.Object
java.lang.reflect.Array
java.lang.reflect.Method
java.lang.ref.Reference
java.lang.Short
java.lang.String
java.lang.StringBuffer
java.lang.StringBuilder
java.lang.System
java.lang.Thread
java.lang.Throwable
java.nio.Buffer
java.util.Arrays
sun.misc.AtomicLongCSImpl
sun.misc.Unsafe
sun.reflect.Reflection