8058779: Faster implementation of String.replace(CharSequence, CharSequence)

Ivan Gerasimov ivan.gerasimov at oracle.com
Sun May 31 15:14:23 UTC 2015


Thanks! I'll simplify this check for overflow, as you're suggesting.

Sincerely yours,
Ivan

On 31.05.2015 10:01, Xueming Shen wrote:
>
> On 5/30/2015 11:38 PM, Peter Levart wrote:
>>
>>
>> Hi,
>>
>> Yes, this one is much easier to grasp.
>>
>> As I understand the check is to avoid overflow in calculation of 
>> StringBuilder initial capacity (newLenHint). If overflow happened, 
>> newLenHint would be negative and StringBuilder construction would 
>> fail with NegativeArraySizeException. But the calculation of newLenHint:
>>
>>     int newLenHint = value.length - targLen + replValue.length;
>>
>> ...considering the following:
>>
>>     value.length >= 0
>>     targLength >= 0
>>     replValue.length >= 0
>>     targLength <= value.length
>>
>> in case of overflow, it can only produce a negative value. So the 
>> check could simply be:
>>
>>     if (newLenHint < 0) {
>>         throw new OutOfMemoryError();
>>     }
>>
>> Right?
>>
>> Regards, Peter
>>
>
> agreed.
>




More information about the core-libs-dev mailing list