1

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

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在为它设置一些其他新值之前先将变量设置为好?

它有什么意义吗?

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

4

6 回答 6

8

在设置其他一些新值之前将变量设置为 null 是否很好?

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

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

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

于 2013-05-23T12:53:21.933 回答
0

不,它没有任何意义。

当一个新对象被分配给一个非空变量时,现有对象将失去它的引用并且它将有资格进行垃圾收集。当您将变量设置为空时,也会发生同样的事情。

于 2013-05-23T12:58:34.950 回答
0

没什么区别。

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

于 2013-05-23T12:58:55.610 回答
0

有时它会阻止在itemmemory leakage中很好地描述并使未使用的对象为.Effective Java"Obsolete Reference"garbage collection

于 2013-05-23T13:11:41.287 回答
0

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

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

于 2014-07-28T14:10:16.403 回答
0

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

于 2013-05-23T12:54:51.597 回答