Shouldn't the question in an Object Oriented language be "Is there any valid reason why byte, long, float, double, int, short and char are primitive types?" but back to your question, if String was a primitive, it wouldn't be able to have any methods ( because primitives can't have methods! ). So if you remove all the methods, and supporting class functionality, what are you left with? char[] ! which is a primitive array! actually, I don't think that's the real reason, but I digress Jamie