刚刚开始学习java,最近看到一个比较String, StringBuilder, StringBuffer三个区别的测试代码,代码本身没有问题,但是就里面的一个小地方有一些疑惑。
1 public class String_StringBuilder_StringBuffer { 2 public static void main(String [] args){ 3 int count = 50000; 4 long t; 5 String testString = "test"; 6 { 7 //count = 50000; 8 String string = ""; 9 t = System.currentTimeMillis(); 10 for (int i = 0; i <= count; i++){ 11 string += testString; 12 } 13 System.out.println("String耗时:"+(System.currentTimeMillis()-t)); 14 } 15 } 16 }
第4行,这里的t变量应该是局部变量,按照java的规则局部变量必须要进行初始化,为什么这里不需要初始化?在这个帖子http://www.oschina.net/question/562215_211978?sort=time#tags_nav 里面也提问了关于局部变量什么需要初始化的问题,刚刚开始接触java,请各位大大们指点指点!
int t = 0;
int t; t=0;
这两个没有区别,只要在使用之前进行初始化就可以
查了一下,应该是只要在local variable使用之前初始化就可以,这里的t在使用前(System.currentTimeMills()-t)就初始化了t=System.currentTimeMills(),所以这里应该没有问题。
关于链接中的那个问题,其实在http://stackoverflow.com/questions/22897300/why-isnt-this-local-variable-initialized-in-java 这个回答里有很好的解释:
1 boolean useUpper=true; 2 double volume; 3 if (useUpper){ 4 volume=6; //<--initialised 5 } 6 //volume may not be initialised 7 double volumeUsed=2*volume;
应为if的条件有可能不满足,导致volume没有初始化,所以这里就有错误。两个for嵌套也是这个道理,内循环有可能根本就不执行,所以j变量不会被初始化。
第四行是先定义,然后没有直接初始化,在使用的时候才初始化的,也就是第九行的