有人能想象这段代码:
public static void main(final String[] args) {
// do something
}
应该变成这样:
public static void main(final String[] args) {
String[] argsCopy = doCopy(args);
// do something
}
(在我们公司,我们有一个 Sonar 规则,强制对所有方法进行这种处理或论证。)我可以想象为什么它对标准方法很重要,但我找不到在工具启动时完成它的任何好处主要方法。我错过了什么吗?
最佳答案
复制数组参数的原因是为了避免在验证数组元素后有人修改数组的可能性。这是一个很好的防御技术,可以保护你免受调用者的恶意调用。
但是,在这种情况下,调用者是 JVM 本身。如果您不相信 JVM 没有恶意代码,那么您遇到的问题比通过复制数组可以解决的问题要大得多。
唯一的异常(exception)是当您将 args
传递给您的某些函数时。在这种情况下,制作副本是个好主意,以防某些方法决定更改 args
的内容。这是我建议制作副本的唯一情况。如果 main
是唯一使用 args
的地方,则不需要复制。
关于java - MAIN 方法应该复制输入参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001580/