It is very useful to have strings implemented as immutable objects. You should read about immutability to understand more about it.
One advantage of immutable objects is that
You can share duplicates by pointing them to a single instance.
(from here).
If String were not final, you could create a subclass and have two strings that look alike when “seen as Strings”, but that are actually different.