Review Request: 7193406 - Clean-up JDK Build Warnings in java.util, java.io

Stuart Marks stuart.marks at oracle.com
Thu Aug 30 02:07:19 UTC 2012



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).

s'marks



More information about the core-libs-dev mailing list