Java - 在for循环中声明变量

dfe*_*r88 16 java micro-optimization

在循环中声明一个变量是不好的做法?在我看来,这样做,如下面的第一个代码块所示,将使用十倍的内存作为第二个...由于在循环的每次迭代中创建一个新的字符串.它是否正确?

for (int i = 0; i < 10; i++) {
  String str = "Some string";
}
Run Code Online (Sandbox Code Playgroud)

String str;
for (int i = 0; i < 10; i++) {
  str = "Some String";
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*n S 26

在循环中声明一个变量是不好的做法?

一点也不!它将变量本地化为其使用点.

在我看来,这样做,如下面的第一个代码块所示,将使用十倍的内存作为第二个

编译器可以优化事物以保持内存使用效率.仅供参考:如果您使用final关键字告诉它您的变量具有对象的固定引用,您可以提供帮助.

注意:如果你有一个更复杂的对象,你在构造函数中执行复杂的代码,那么你可能需要担心单次执行和多次执行,并在循环之外声明对象.

  • 但即使在这种情况下,如果你将str的声明移到循环之外,并将赋值保留在循环中,你仍然会创建相同的10个实例. (2认同)

Mat*_*ins 7

在这两个示例中,您将实例化一个包含字符串"Some String"的新字符串对象,次数相同.

str循环内部声明的第一个示例中,在for循环完成后,对该字符串的所有引用都将丢失,从而允许Java的垃圾收集器从内存中删除所有字符串实例.但是,在您str在循环外部声明的第二个示例中,您创建的最后一个字符串仍将在循环外部引用它,而Java的垃圾收集器将仅从实例化的内存中删除10个字符串中的9个.

因此,第一种方法更好,因为您没有保留字符串的任何引用,干扰垃圾收集器确定它是否仍在使用的能力.