为什么JavaFx PasswordField将其内容作为String返回?

Bro*_*her 12 java string javafx password-protection

我目前正在学习JavaFX,我对JavaFX中的PasswordField没有返回密码的char或甚至字节数组的方法感到有点困惑.相反,我必须使用返回String的getText().

正如你在这里可以看到的那样, swing决定将getText()方法标记为depricated,并告诉程序员使用getPassword()代替它,它返回一个char数组.

如果我正确地取消了,那么char数组会更安全,因为你可以通过将所有值设置为0来完全擦除它们.那么为什么Oracle决定在JavaFx中使用字符串?是否有一些从堆中删除字符串的新方法?

编辑:据我所知,字符密码更加节省,因为我们可以删除它们(覆盖它们),而不是字符串.

Rya*_*ein 0

实际上,字符串数组在其基本实现中使用了字符数组。它们都存储在虚拟机中,并且都可能不安全。

如果您不想依靠垃圾收集器来清理密码并销毁痕迹,请按照jewelsea 在评论中建议的操作并编写自己的代码。

至于为什么?唯一能够真正回答 Java 中发生任何事情的原因的实体是 Oracle。