我只是检查一些表达式的正则表达式,在方法中,我一次又一次地重用该变量
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
是否合适?
它有意义吗?
注意:它可能是非标准的标志,再次使用相同的变量,但我只是想知道在重新分配之前是否可以使变量无效?
答案 0 :(得分:8)
在设置其他新值之前,将变量设为null是否合适?
不 - 这是毫无意义的,并且使代码更难阅读。
在我看来,无论如何你应该尝试某种循环方式 - 目前你一次又一次地使用相同类型的代码,这是一个坏主意。所有这一切都在变化 - 数据 - 所以参数化。我假设在您的实际代码中,您不会对输入数据的模式和进行硬编码,但您可以轻松地获得要测试的模式列表,例如。
我个人发现,如果我在一个方法中重复使用一个变量用于不同目的(而不是根据其当前值修改它),那么建议我应该重构反正。
答案 1 :(得分:0)
它没有区别,因为当您将对象分配给不同的引用时,旧对象将失去其引用并且将有资格进行垃圾回收。分配给null也会使引用失去指向当前对象的链接。
答案 2 :(得分:0)
不,它没有任何意义。
将新对象分配给非null变量时,现有对象将失去其引用,并且它将符合垃圾收集的条件。将变量设置为null时会发生同样的事情。
答案 3 :(得分:0)
没有区别。
如果您将null
分配给变量并立即为其分配值,则只需在代码上再添加一行。当您分配另一个值而不是null时,旧值将有资格进行垃圾回收。
答案 4 :(得分:0)
有时它会阻止在memory leakage
项Effective Java
中详细描述"Obsolete Reference"
,并为garbage collection
准备好未使用的对象。
答案 5 :(得分:0)
我执行了一些测试,似乎将变量设置为null 确实有助于垃圾收集过程。显然,JVM对设置为null的变量的响应比对分配给新对象的变量的响应更快,使前一个对象保持挂起状态。我的代码可以在这里找到: