No subject
Сергей Цыпанов
sergei.tsypanov at yandex.ru
Tue Feb 25 15:43:44 UTC 2020
Hello,
current implementation of String.substring(int,int) has a fast-path for the case when beginIndex = 0 and endIndex = length.
I think there should be similar fast-path for the case beginIndex = endIndex (asuming both are valid):
diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java
--- a/src/java.base/share/classes/java/lang/String.java
+++ b/src/java.base/share/classes/java/lang/String.java
@@ -1900,10 +1900,13 @@
public String substring(int beginIndex, int endIndex) {
int length = length();
checkBoundsBeginEnd(beginIndex, endIndex, length);
- int subLen = endIndex - beginIndex;
if (beginIndex == 0 && endIndex == length) {
return this;
}
+ int subLen = endIndex - beginIndex;
+ if (subLen == 0) {
+ return "";
+ }
return isLatin1() ? StringLatin1.newString(value, beginIndex, subLen)
: StringUTF16.newString(value, beginIndex, subLen);
}
With this call to str.substring(n,n) will be allocation-free.
Regards,
Sergey Tsypanov
More information about the core-libs-dev
mailing list