【问题标题】:Making a variable null before re-using the same variable again in Java在 Java 中再次使用相同的变量之前使变量为空
【发布时间】:2013-05-18 20:17:00
【问题描述】:

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

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 是否很好?

它有什么意义吗?

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

【问题讨论】:

    标签: java null variable-assignment


    【解决方案1】:

    在设置其他新值之前将变量设置为 null 好不好?

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

    在我看来,无论如何你都应该想出一些循环的方法——目前你一次又一次地得到相同类型的代码,这是个坏主意。改变的只是数据——所以参数化它。我假设在你的真实代码中你不会硬编码模式开始的输入数据,但是你可以很容易地得到一个模式列表来测试,例如。

    我个人发现,如果我在方法中出于不同目的重用变量(而不是根据当前值修改它),建议我应该重构无论如何。

    【讨论】:

    • 感谢乔恩的帮助 :)
    【解决方案2】:

    这不会有什么区别,因为当你将一个对象分配给不同的引用时,旧对象将失去它的引用并且有资格进行垃圾回收。分配给 null 也会使引用失去与当前对象的链接。

    【讨论】:

    • 感谢您的宝贵意见
    【解决方案3】:

    不,没有任何意义。

    当一个新对象被分配给一个非空变量时,现有对象将失去它的引用并且它将符合垃圾回收的条件。将变量设置为 null 时也会发生同样的情况。

    【讨论】:

      【解决方案4】:

      没有区别。

      如果您将null 分配给一个变量并在之后立即为其分配一个值,那么您只会在代码中多添加一行。当您分配另一个值而不是 null 时,旧值就可以进行垃圾回收了。

      【讨论】:

        【解决方案5】:

        有时它会阻止memory leakageEffective Java 项目"Obsolete Reference" 中得到很好的描述,并为garbage collection 准备好未使用的对象。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 2013-11-19
            • 2018-03-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-23
            • 1970-01-01
            • 2014-05-22
            • 2021-05-09
            相关资源
            最近更新 更多