比如
public static String APP_NAME = "segmentFault";
当APP_NAME被回收后,APP_NAME的值会变成null,还是不确定的乱七八糟的值?
比如
public static String APP_NAME = "segmentFault";
当APP_NAME被回收后,APP_NAME的值会变成null,还是不确定的乱七八糟的值?
Android里static也是不安全的,因为内存吃紧,进程按照级别会被回收,自然与进程同生命周期的static也是会被回收掉的,这里就为null了。如果需要保存通过安卓的onSaveInstanceState(Bundle outState)通过bunlde保存到Disk上。
强引用的变量在任何情况都不会被回收,当内存实在不够时会抛出 OutOfMemory 异常让 App Crash 掉,再次运行时也会重新初始化。
不过如果在其他进程访问这个进程的静态变量是访问不到的,会获得 null 或 默认值。
C语言里 free 内存后有个比较好的做法就是在 free 后把指针赋为 NULL 。
至于 Java 应该也是类似,原来的引用指向的内存虽然还在但是已经不属于程序了。
而且,回收这件事应该是 GC 确保你不会再访问这个变量之后进行的。 因此你也无法得知值是什么了。
硬要说的话,应该是迷失在广阔无垠的数据海洋里。 (堆里)
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
静态成员是不会被回收的。楼主不用担心静态成员的值会莫名其妙的变化。如果代码中没有对 APP_NAME 进行另外的赋值,那么它的值永远都是 "segmentFault"。