优秀博文地址:http://www.cnblogs.com/znsongshu/p/6282672.html
另一个帖子:https://bbs.csdn.net/topics/380085577?list=lz
其中的总结部分:
来个总结吧:
int test(){
String str = null;
str = "String";
}
像这种String str = xxx;
不管xxx是null还是其他字符串,str这个东西都是在栈里有块空间,可以理解为c的指针,=null的时候,里面存的是0(这块不知道对不对),非null的时候存的是实际字符串的地址(堆中或者常量池中)。
而String str;
这种情况,jvm同样也为其分配了一块空间,但是不知道值是多少
java语法要求引用之前必须初始化,所以你直接这么写,str根本不能引用,所以无所谓。
其实jvm也完全可以不为它分配空间。
这个问题,说到底,其实就是java的语法要求,必须初始化的问题。
如果有C语言经验的话,可能有这样的问题,
int i;
int j = i; //使用了未初始化的i
因为i没有初始化,所以i是个“随机的值”,比如i可能是5,可能是8,可能是……
java为了避免这种问题,语法上规定,局部变量在使用之前,必须初始化!如果不初始化就报错。
原文:https://www.cnblogs.com/shanchuang-119/p/10253870.html