String interning (WAS: SAX2/Java: Towards a final form)

Tyler Baker tyler at
Mon Jan 17 21:55:05 GMT 2000

Miles Sabin wrote:

> David Brownell wrote,
> > Miles Sabin wrote,
> > > Except that String.intern() isn't the _only_ way of
> > > making foo.equals(bar) iff foo == bar (in particular
> > > contexts, as opposed to across the whole JVM).
> >
> > It's the only way to ensure it's so if foo is a string
> > literal, as is rather common usage.
> I don't follow. You're surely not suggesting that
>   foo == "literal".intern()
> is faster than,
>   foo.equals("literal")
> are you?

In the Java Language Specification all JVM's must intern String literals and String
constants. These object reference of the String literal points to an interned String at
all times so:

if (foo == "literal") {


only makes the call to String.intern() (if the JVM chooses to even do that as it might
have a faster way of doing it during class loading), once and not every time you invoke
the method.

Also String constants are interned so you can write code like this:

public static final String CONSTANT = "foo";

Instead of:

public static final String CONSTANT = "foo".intern();

I hope this helps...


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: 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