日期:2014-05-20  浏览次数:20674 次

傻瓜,菜鸟问题
String   str= " "   是指向一个内存空间的,这个内存空间有一个空的字符串 " "
str   被重复赋值后,内存空间是怎么分配,覆盖原有内存,还是重新申请内存?
String   str=null;的情况又象什么样呢?

------解决方案--------------------
str 被重复赋值后,内存空间是怎么分配,覆盖原有内存,还是重新申请内存?
------------------------------------
重新申请内存,重新分配,字符串的内容是不能改变的

String str=null;的情况又象什么样呢?
---------------
不分配内存,不赋值直接操作会出错
------解决方案--------------------
那原来的内存怎么办呢。会被垃圾收集器收掉吗。收不掉怎么半。
我如果重复赋值一万次呢,启不是有一万个废弃内存空间被泄漏
----------------------
理论上来说,如果没有其他对象引用该内存,那就会被垃圾回收器回收。但是被垃圾回收器的回收是系统控制的,有快有慢,所以不管重复赋值多少,都是有可能会发生内存泄漏的。

------解决方案--------------------
StringBuffer的append是追加,我的目的当然是要使用一个全新的字符串了。 
StringBuffer的append的话,StringBuffer的长度无限加长,这不是我愿意看到的结果啊, 
我要使用的String类型变量被重复赋值,每次赋值都要处理一次。处理完以后再次赋值做处理。 
------------------------ 
你处理完以后的结果肯定要使用了,所以你可以用局部变量吗,在方法里写处理String
然后多次调用这个方法,得到你想要的String结果不就行了吗,局部变量会自动消除的呀
------解决方案--------------------
是啊  应该是重新分配内存的 费掉的String 会被垃圾回收器回收,当然在内存够使用的情况下,JVM是不会自己启动垃圾回收器的 至于String s = null ; reference s 没有指向任何对象 没有在堆中分配内存,只是在栈中分配了一个s的变量