There is a potential for a memory leak, if you take a substring of a sizable string and not make a copy (usually via the String(String)
constructor).
Note that this has changed since Java 7u6.
See https://bugs.openjdk.java.net/browse/JDK-7197183.
The original assumptions around the String
object implementing a flyweight pattern are no longer regarded as valid.
See this answer for more info.