Java编程上很小的问题,关于声明变量的
public class A2{
public static void main(String args[]){
int i;
int a[]=new int[5];
for(i=1;i<5;i++)
a[i]=i;
System.out.println(a[i]);
}
}
这个程序上的i好像没有初始化啊,int i;这句没有初始化啊
不是说局部变量要先初始化吗
还是说在for中的i=1初始化也行吗
参考答案:小小一个问题高级魔法师们都栽跟头了咩。
1.Java中绝对不允许不初始化就使用变量,否则编译报错。
2.所谓初始化就是在使用这个变量之前第一次给它赋值。
3.for(代码1;代码2;代码3)解释如下:
在进入for循环之前执行代码1,只执行1次。代码1可以是任意代码。
在每次for循环内代码执行之前,执行代码2。代码2必须返回一个布尔值。如果布尔值是true则进行for循环,否则推出循环。
在每次for循环内最后一行代码执行之后,执行代码3。代码3可以是任意代码。
所以,
int i = 0;
for(;i<5;i++){...}
和
int i;
i = 0;
for(;i<5;i++){...}
和
int i;
for(i=0;i<5;i++){...}
和
for(int i=0;i<5;i++){...}
对于for循环来讲是等价的。
其中前3部分严格等价,最后一个在变量的生命周期上与其他有所区别。
所以louiGG和dafei2599是正确的。zhukaiheihei“不需要,只要不报错就行”的结论是错误的。pengyifan0803“java给i做默认的初始化,默认值应该为0。 并且给出警告信息。”是错误的,我在JDK1.4下编译报错,注意,是error,不是warning!。同时“for中的i=1是对i的赋值,不应该算作初始化。 ”的说法有概念上的错误。
另外需要说明一点:Java的确会给基本数据类型一个默认的初始值,但是这限于不可预知的情况。比如,一些数据库中整数是允许存放null值的,而Java基本数据类型不存在null,因此如果从数据库取出一个null值,Java会自动赋值为零。类似情况还有从界面上取得一个整型数据时,实际上用户什么也没有输入,这种情况下也会赋值为0。