【问题标题】:Java : declaring objects in a loop [duplicate]Java:在循环中声明对象[重复]
【发布时间】:2014-01-09 12:34:48
【问题描述】:

有什么区别

for (...) {
  String temp = "temp";
}

String temp;
for (...) {
  temp = "temp";
}

我的意思是,Java 循环创建/删除对象会浪费很多资源吗?

谢谢。

【问题讨论】:

  • 它不是一个对象。它是一个局部变量或类变量。
  • 我不会依赖这个并且更喜欢可读性。如果 temp 只能在 for 循环中使用,请使用第一个。
  • 您的问题仅显示将 temp 设置为文字字符串,使其成为循环不变的。真的吗?这与您对temp 所做的任何其他事情都有很大 的区别。如果我是你,我会澄清这个问题。

标签: java loops object reference


【解决方案1】:

区别在于变量的范围

  • 定义的内部循环意味着仅在循环内部可见。

  • 在循环外定义意味着在循环内外可见。

Java 循环创建/删除对象会浪费很多资源吗?

如果在循环内定义,那么它将在每次迭代时重新初始化,这意味着一个额外的可执行语句。如果您想在每次迭代时重新初始化它,那么最好将其移出以节省该语句浪费的 CPU。

【讨论】:

    【解决方案2】:

    唯一的区别是范围的问题。在 for 块外声明变量后,可以在 for 循环块外访问变量(对象引用)。​​

    如果对象引用变量是在for循环中声明的,那么它只能在for循环块中被访问。

    【讨论】:

      【解决方案3】:

      首先是两个作用域变量。

      1. 在循环内定义将只对循环可见。
      2. 在循环外定义将在循环内外可见

      Java 浪费很多资源创建/删除

      Java 创建String 的对象与您迭代循环的次数一样多,但引用将相同。所以它有点资源和内存消耗。使用StringBuilderStringBuffer

      【讨论】:

        【解决方案4】:
        for (...) 
        
        {
        
        String temp = "temp";
        
        }
        

        在这种情况下,您的 temp 仅适用于 For 循环

        String temp;
        
        for (...)
        
         {
        
          temp = "temp";
        
        }
        

        如果您在方法中编写此代码,那么它将在整个方法中可用。

        注意:-局部变量在 Stack 中创建,并在执行该方法后被删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-23
          • 2015-04-12
          • 2021-08-29
          • 2015-08-31
          • 1970-01-01
          • 2014-06-15
          • 1970-01-01
          相关资源
          最近更新 更多