"string" and "String" and java.lang.String

js> var s = "abc";
abc
js> s = new String(s);
abc
js> s == new String("abc");
false
js> typeof s
object
js> s instanceof String
true
js> s = s.toString();
abc
js> typeof s
string
js> s == "abc";
true
js> s = new java.lang.String("abc");
abc
js> s instanceof String
true

So it means that "string" (lower case) indicates JS string and "String" (capitalized) does java.lang.String. Note that "String" == "String" compares itself with other in identity, while "string" does with other in value. "String" is a shortcut for "java.lang.String" and java.lang.String#toString returns JS string in Rhino.
Confusing.