当前位置: 首页 > 面试题库 >

关于Java字符串常量池

陈瀚
2023-03-14
问题内容

这与Java字符串常量池有关。在我的一个程序中,我正在解密数据库的密码并将其存储在字符串中。我听说Java字符串将存储在Constant池中,并且不会被VM重新启动或加载了String
Quits的ClassLoader破坏。

如果是这种情况,我的密码将存储在字符串池中。我非常关心这个问题。还有其他方法可以销毁这些文字或我可以做的其他任何事情。

请对此提出建议,

问候,阳光明媚。


问题答案:

这里有几个不同的问题。首先,术语“常量池”指的是用于字符串和数字文字的类文件的非常特定的部分,或者是指从驻留在JVM中的这部分类文件生成的数据结构。除非密码是课程文件的一部分,否则不会在此处存储密码。

但是,确实有一些String对象通过String实习在整个程序中存储和共享。任何字符串文字都会自动插入,您调用intern()方法的所有字符串也会自动插入。据我所知,没有其他字符串以这种方式存储,因此,除非您自己自动设置包含密码的字符串,否则我不需要担心这一点。

要注意的另一个问题是,如果您不希望密码驻​​留在内存中,则可能需要谨慎对待垃圾回收,因为不再引用的String可能仍在内存中。同样,如果使用某些子字符串之类的子字符串之类的子字符串之类的字符串方法,则在使用完整个密码字符串后,可以保留整个密码字符串。

但是,如果您担心的是其他Java代码是否能够看到已被锁定的旧密码或仍保留在内存中的旧密码,则无需担心。无法迭代或查看内部字符串池的元素,也无法破解字符串以查看其支持数组。



 类似资料:
  • 当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是

  • 如这些问题中所述:问题1 在以下情况下,JVM将创建一个新的字符串对象,而不是使用字符串池中的现有对象: 然而,在阅读了下面两个类似的陈述之后,我有一个疑问。 从SCJP准备书: 当编译器遇到字符串文字时,它会检查池中是否已经存在相同的字符串。如果找到匹配项,对新文本的引用将指向现有的String,并且不会创建新的String文本对象。 来自JavaRanch: 在本例中,由于关键字“new”,我

  • 问题内容: 在C ++中,创建多行字符串的最佳规范方法是创建相邻字符串,并让编译器在编译时将它们连接起来,如下所示: 在Java中,我唯一知道的方法是串联: 问题是,这是在运行时生成单个字符串,还是Java实际上也在编译时进行连接?出现此问题的原因是由于以下行为: 问题答案: String s3 = “a”; s3 += “bc”; 与: 因此,它创建了一个新实例。 您甚至可以尝试:

  • 当使用文字创建字符串时,它会存储在池中。但当使用new运算符创建字符串对象时,它会将对象存储在堆中。 但是,堆中的对象只是一个指向存储在池中的文本的指针,还是一个存储在堆中的简单字符串对象,符合GC的条件?

  • 当我写下面的代码时,我遇到了一个问题 然后我运行我的代码,控制台打印这个 这让我很困惑。为什么第二次打印是真的,而第一次打印是假的??在我对String文字池的理解中,当定义一个字符串时,JVM将检查池中是否包含该字符串,如果不包含,则将该字符串放入池中。 在我的代码中,变量Hello存在于字符串池中,“Helo”和“lo”也在池中,我的问题是 如果池中存在Helo和lo串联的结果。 关于str5

  • 本文向大家介绍Java 中的字符串常量池详解,包括了Java 中的字符串常量池详解的使用技巧和注意事项,需要的朋友参考一下 Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使