A String is a reference type even though it has most of the characteristics of a value type such as being immutable and having == overloaded to compare the text rather than
It is mainly a performance issue.
Having strings behave LIKE value type helps when writing code, but having it BE a value type would make a huge performance hit.
For an in-depth look, take a peek at a nice article on strings in the .net framework.