首页 新闻 会员 周边

java局部变量的初始化问题

0
[已解决问题] 解决于 2016-05-09 21:54

刚刚开始学习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,请各位大大们指点指点!

ttylcc的主页 ttylcc | 菜鸟二级 | 园豆:204
提问于:2016-04-06 00:06
< >
分享
最佳答案
1

int t = 0;

int t; t=0;

这两个没有区别,只要在使用之前进行初始化就可以

奖励园豆:5
小光 | 小虾三级 |园豆:1766 | 2016-04-06 09:40
其他回答(2)
1

 查了一下,应该是只要在local variable使用之前初始化就可以,这里的t在使用前(System.currentTimeMills()-t)就初始化了t=System.currentTimeMills(),所以这里应该没有问题。

ttylcc | 园豆:204 (菜鸟二级) | 2016-04-06 00:45

 关于链接中的那个问题,其实在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变量不会被初始化。

支持(1) 反对(0) ttylcc | 园豆:204 (菜鸟二级) | 2016-04-06 00:54
0

第四行是先定义,然后没有直接初始化,在使用的时候才初始化的,也就是第九行的

九九哥 | 园豆:182 (初学一级) | 2016-04-06 09:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册