在Java中,通常认为使用char []数组存储密码比使用字符串对象更安全。这是因为字符串对象是不变的,这意味着一旦创建它们就无法修改它们。这意味着,如果包含密码的字符串对象存储在内存中,则不能牢固地删除或覆盖它,并且即使不再需要攻击者也可以访问它。
相反,char []阵列是可变的,这意味着可以修改和擦除其内容物。这意味着存储在char []数组中的密码一旦不再需要,就可以立即被安全删除或覆盖,从而降低了攻击者访问密码的风险。
此外,字符串对象通常存储在字符串池中,这是存储器的共享区域,其中存储字符串对象以有效重复使用。这意味着字符串池中可能存在多个对同一字符串对象的引用,并且可以通过这些引用中的任何一个可以访问密码。另一方面,char []数组未存储在字符串池中,因此攻击者访问它的可能性较小。
总体而言,char []的可突变性和非淘汰行为使其成为存储密码的选择,而不是字符串,这就是为什么在Java中首选它的原因。