String interning

David Megginson david at megginson.com
Fri Jan 14 21:49:11 GMT 2000


Assaf Arkin writes:

 > For the life of me I cannot figure out what's wrong with
 > 
 >   if ( name.equals( "foo" ) )
 > 
 > or
 > 
 >   if ( name == "foo" || name.equals( "foo" ) )

The normal case is that the names are *not* the same (you probably
test against many possibilities to find a match), so you pay the
equals() cost most of the time.  For comparison, I just whipped up a
Java class to compare two (non-equal) Strings 10,000,000 times.  Here
are the USER timings:

No comparisons (startup overhead): 0.67 seconds
Compare with ==:                   0.94 seconds (=0.27 seconds)
Compare with equals():             8.00 seconds (=7.33 seconds)

That's a very significant performance difference.  It doesn't matter
if I use == before equals(), of course, since they are not == or
equals().  Now, I don't know if the difference is big enough to show
up in an overall application, but given the efficiency of ==, it would
probably be an order of magnitude faster to test against 30 or 40
names using == than it would to make a single Hashtable or HashMap
lookup.


All the best,


David

-- 
David Megginson                 david at megginson.com
           http://www.megginson.com/

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ or CD-ROM/ISBN 981-02-3594-1
Please note: New list subscriptions now closed in preparation for transfer to OASIS.





More information about the Xml-dev mailing list