Review Request: 7193406 - Clean-up JDK Build Warnings in java.util, java.io
Joe Darcy
joe.darcy at oracle.com
Thu Aug 30 06:23:28 UTC 2012
On 8/29/2012 7:07 PM, Stuart Marks wrote:
>
>
> On 8/29/12 4:56 PM, Joe Darcy wrote:
>> On 8/29/2012 4:20 PM, Stuart Marks wrote:
>>> The original code was like this:
>>>
>>> 427 private static int getMask(String actions) {
>>> ...
>>> 435 // Check against use of constants (used heavily within
>>> the JDK)
>>> 436 if (actions == SecurityConstants.FILE_READ_ACTION) {
>>> 437 return READ;
>>> 438 } else if (actions ==
>>> SecurityConstants.FILE_WRITE_ACTION) {
>>>
>>> The various SecurityConstants being used here are Strings.
>>>
>>> Note that this is doing String comparisons using == which is usually
>>> a bug.
>>> But this code is relying on String interning to provide object
>>> identity for
>>> equal string literals, in order to provide a fast path optimization
>>> for these
>>> common cases. Changing this code to use switch-over-strings would be
>>> semantically equivalent, but it would probably slow things down,
>>> since switch
>>> provides equals() semantics instead of == semantics.
>>
>> This would be a fine point to highlight in the comments around this
>> check!
>
> The comment at line 435 did serve to tip me off that something unusual
> was going on with this code, so it served its purpose. But I'll admit
> that it's not as explicit as it could be. How about this:
>
> // Use object identity comparisons with String constants for
> performance
> // reasons (these values are used heavily within the JDK).
>
I recommend explicitly mentioning interning "Using identity comparison
against known-interned strings for performance benefit."
-Joe
More information about the core-libs-dev
mailing list