在Java中再次使用相同的变量之前使变量为null

时间:2013-05-23 12:52:30

标签: java null variable-assignment

我只是检查一些表达式的正则表达式,在方法中,我一次又一次地重用该变量

Pattern pattern = Pattern.compile("([^test])");
        Matcher matcher = pattern.matcher("SS");
        if (matcher.find()) {
            return false;
        }
        //Making it 'null' before re-use
        pattern = null;
        matcher = null;
        pattern = Pattern.compile("([newtest]){4,}");
        matcher = pattern.matcher("test");
        if (matcher.find()) {
            return false;
        }
        pattern = null;
        matcher = null;
        pattern = Pattern.compile("[stack]{2,}");
        matcher = pattern.matcher("overflow");
        if (matcher.find()) {
            return false;
        }

在设置其他新值之前,将变量设为null是否合适?

它有意义吗?

注意:它可能是非标准的标志,再次使用相同的变量,但我只是想知道在重新分配之前是否可以使变量无效?

6 个答案:

答案 0 :(得分:8)

  

在设置其他新值之前,将变量设为null是否合适?

不 - 这是毫无意义的,并且使代码更难阅读。

在我看来,无论如何你应该尝试某种循环方式 - 目前你一次又一次地使用相同类型的代码,这是一个坏主意。所有这一切都在变化 - 数据 - 所以参数化。我假设在您的实际代码中,您不会对输入数据的模式进行硬编码,但您可以轻松地获得要测试的模式列表,例如。

我个人发现,如果我在一个方法中重复使用一个变量用于不同目的(而不是根据其当前值修改它),那么建议我应该重构反正。

答案 1 :(得分:0)

它没有区别,因为当您将对象分配给不同的引用时,旧对象将失去其引用并且将有资格进行垃圾回收。分配给null也会使引用失去指向当前对象的链接。

答案 2 :(得分:0)

不,它没有任何意义。

将新对象分配给非null变量时,现有对象将失去其引用,并且它将符合垃圾收集的条件。将变量设置为null时会发生同样的事情。

答案 3 :(得分:0)

没有区别。

如果您将null分配给变量并立即为其分配值,则只需在代码上再添加一行。当您分配另一个值而不是null时,旧值将有资格进行垃圾回收。

答案 4 :(得分:0)

有时它会阻止在memory leakageEffective Java中详细描述"Obsolete Reference",并为garbage collection准备好未使用的对象。

答案 5 :(得分:0)

我执行了一些测试,似乎将变量设置为null 确实有助于垃圾收集过程。显然,JVM对设置为null的变量的响应比对分配给新对象的变量的响应更快,使前一个对象保持挂起状态。我的代码可以在这里找到:

http://www.evernote.com/shard/s4/sh/1a067433-722d-4d2c-9487-0ac661261c20/45f571f144a8af40d62d2e48ea1670e9