C# treats strings as primitive, e.g., they can be cases in switch statements. This, combined with the fact that == can be overloaded, seems like it will make it difficult to know when comparisons are by value vs by reference. Java seems more consistent, if less concise.