For numerous reasons.
Some of those:
- it's about the only thing that can be printed to the console or most user interface controls. Even primitive types such as int are converted to Strings
- because they are immutable they are perfect as keys for Maps
- it just makes sense to store (fixed) alphanumeric information in Strings
Now about the creation of objects. Sure, a lot of methods of the String class return a new String object. But a lot of the time, the original becomes available for garbage collection right afterwards. In the end, the number of String objects doesn't change that much over time in most applications.
Now there is a trick to reduce the number of String objects somewhat. When you know that you need to do a lot of String concatenation, removal or replacing,
you should consider using StringBuilder. Unlike String, this is mutable, and if you are finished you can create a String using the toString method.