The JLS says this:
15.28 Constant Expression
ConstantExpression:
Expression
A compile-time constant expression is an expression denoting a value of primitive type or a String that is composed using only the following:
* Literals of primitive type and literals of type String
* Casts to primitive types and casts to type String
...
i.e. Objects cannot be constant expressions, and new String("abc") is an Object (and not merely a string literal).
It seems to me that a good way of thinking about strings is somewhere between primitives and Objects, String objects seem to me to be a sort of wrapper around a string literal, much like Integer is a wrapper around int, but with automatic wrapping and unwrapping enabled (much as the Integer and other wrapper classes will behave in J2SDK1.5).
Of course the technical details may be much different to this, but I find it a good way to understand what is going on in these cases.