一旦创建了String对象,我们就不能修改它但是如果我们对它做任何操作,JVM会创建新的对象。这里通过创建新对象然后 JVM 消耗更多内存。那么我认为这会导致内存问题,对吗?
最佳答案
你是对的。绝对值得意识到这个问题,即使它不会每次都影响到您。
正如您所说,字符串在创建后无法更改 - 它们是不可变的,并且不会公开很多更改它们的方法。
但是,诸如 split() 之类的操作将在后台生成额外的字符串对象,并且每个字符串都有一个 memory overhead。 如果您保留对它们的引用。
正如其他张贴者所指出的,对象会很小,垃圾收集通常会在旧对象超出范围后清理它们,因此您通常不必担心这一点。
但是,如果您正在做一些特定的事情并持有大量的字符串引用,那么这可能会困扰您。
查看字符串 interning根据您的用例,注意链接页面上的警告。
需要注意两点:
1) 硬编码字符串文字将为 automatically interned通过 Java,减少了这种影响。
2) + 运算符在这方面更有效,它将在底层使用字符串生成器,从而提供性能和内存优势。
关于java - 字符串不可变内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331313/