首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java input = "“与input = null不同吗?

Java input = "“与input = null不同吗?
EN

Stack Overflow用户
提问于 2009-07-24 18:27:12
回答 6查看 5K关注 0票数 6

我正在运行一个J2ME应用程序,遇到了一些严重的内存问题。

因此,我构建了另一个步骤来清除巨大的输入字符串,并处理它的数据并清除它。但是直到我设置input = null而不是input = "".,它才解决了这个问题。

在内存管理方面不应该是一样的吗?谁能给我解释一下区别吗?

谢谢,

rAyt

代码语言:javascript
复制
for(int x = 0; x <= ChunksPartCount; x++)
{
    _model.setLoading_bar_progress((x * ChunkSize));
    input += web_service.FullCompanyListChunksGet(x, ChunkSize);

    if((x * ChunkSize) > 5000)
    {
        ReadXML(input);
        input = null;
    }
}

编辑:

我还是想指出答案是解决之道。我认为先生们的发言方向是正确的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-24 18:35:15

每个变量实际上都是一个指向内存中“数据”的指针。

input = "“将输入分配给string对象。它有一个长度(0)和一个空数组,以及一些其他与它相关的数据。

此时,input.length()将返回0。

input = null使输入指向“无效”。Null是一种特殊情况,它意味着这个指针没有指向任何东西,它没有赋值。

input.length()现在将抛出一个异常,因为您没有调用.length。

票数 12
EN

Stack Overflow用户

发布于 2009-07-24 18:29:55

input = null删除内存中的对象(让垃圾回收器删除),而input = ""实例化包含空字符串""String对象。通过将输入设置为null,您将使input成为一个空对象,因此它不会占用任何内存,而在设置input = "“时,您将它设置为一个新对象,这肯定会占用一些内存(显然应该是最小的)。

您可以从这篇文章讨论Java和性能来查看IBM,这使我以前的建议望而却步。上面写着:

显式赋值只是在完成引用对象时将其设置为null的做法。明暗化背后的思想是,它帮助垃圾收集器使对象更早地不可访问。或者至少这就是理论。 有一种情况是,使用显式赋值不仅是有用的,而且实际上是必需的,在这种情况下,对对象的引用的作用域比程序规范使用或认为有效的范围更广。包括使用静态或实例字段来存储对临时缓冲区的引用,而不是使用局部变量,或者使用数组存储运行时可能仍然可以访问的引用,而不是程序的隐含语义。

而且,

在1997年9月的"Java开发人员连接技术提示“专栏(请参阅参考资料)中,Sun警告了这种风险,并解释了在上面的pop()示例中如何需要显式赋值。不幸的是,程序员经常使用显式的空值来帮助垃圾收集器。,但在大多数情况下,它并不能帮助垃圾收集器在所有,在某些情况下,它实际上会损害程序的性能。

票数 5
EN

Stack Overflow用户

发布于 2009-07-24 18:34:37

使用StringBuffer可能是更好的方法

这里已经回答了其中的一些问题:

java中的字符串生成器和字符串缓冲区

为什么在java中使用StringBuffer而不是string concantion操作符

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1179346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档