String interning

David Megginson david at
Fri Jan 14 20:35:59 GMT 2000

David Brownell writes:

 > If the concern is only memory efficiency, then I tend to agree
 > that there may well be more important things to worry about.
 > But maybe not; so the filter can benefit from knowing if the
 > data it gets is already interned.

That's just the question.  I think it's too much hassle for people to
have to do

  boolean namesAreInterned = 

and then

  if (name == "foo" || (!namesAreInterned || name.equals("foo"))) {
    do something

every time they want to compare names, and I very much doubt that
people will be happy with

  private final static String FOO = mySAXInternTable.intern("foo");

and then

  if (name == FOO) {
    do something

One of the basic design goals of SAX 1.0 was to keep the interface
simple, under the assumption that many (most?) of the users will not
be XML or Java gurus, or even well-experienced programmers in

Keeping this goal in mind, then, there are only two reasonable

1. Declare that SAX2 names must always be interned as with

2. Declare that SAX2 names need not be interned as with

Them's the choices.

All the best,


David Megginson                 david at

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