有没有合法的方法可以强制JVM不将特定的
String
实例存储在长期字符串池中?new String()
是否提供此功能,我可以100%确定以这种方式创建的值将被放入堆中而不是池中,除非我调用intern()
?
有没有合法的方法可以强制JVM不将特定的String
实例存储在长期字符串池中?
new String()
是否提供此功能,我可以100%确定以这种方式创建的值将被放入堆中而不是池中,除非我调用intern()
?
String
实例将会如此,我想我应该坚持使用原始的char[]
。 - voismagerchar []
,因为它可以被明确地擦除(通过覆盖其内容)。 即使String
没有最终出现在字符串池中,也无法保证GC何时收集它(即使在此之后,直到内存被其他对象重用,原始字节也会持久存在)。 - crizzischar[]
只是在假装有更高的安全性,但实际上并不存在。在垃圾回收堆中,可能会有任意数量的副本飞来飞去,而你只是覆盖其中一个。此外,在数组上执行最后一个操作时进行覆盖,可能会被 JVM 优化掉。 - HolgerString
实例,它永远不会在池中。但是,如果您怀疑某人可能会调用 intern()
,请不要忘记同样的人可能会调用 new String(yourCharArray).intern()
。因此,这与 池 无关。 - Holger
Console
类的readPassword()
方法返回char[]
类型。因此,我会说,“一开始就不要创建String
”。 - daniu