关于java的局部变量问题,在方法中定义了一个局部变量,未赋值,然后在for语句里给其赋值,然后打印却报错,而如果在定义的时候就给它赋值,最后打印的则是在for语句里赋的值,这是什么原因啊?如下图所例,求大神们解答,想了很久都没想过来,求详解
这不是局部变量的问题,因为java的语法严谨,你声明了变量 i ,条件代码块里对它赋值,如果条件不成立(编译器可不知道你的条件到底成不成立),
即赋值没做,那你就在对没有值的变量操作,java肯定是不允许的
定义在局部变量里面的变量是必须要给初始话的,既是因为安全,防止你直接用他的时候没有值。不像成员变量会自动给默认值。第二也是语法规定吧。只能这样回答了。
没什么问题,只是因为i是int,print函数参数是string,跟定义时候有没有赋值没关系,for循环最少执行一次,肯定不会是i为空
Java的编译的时候并不能知道你这个for循环有没有执行,也就不知道赋值那句话有没有成功执行,如果这个循环一次都不执行,但编译通过了,运行就会报错,java是不允许的
必须先赋值,赋值不能写在if for while里面,在赋值前不能取值,java规定的。
局部变量必须先赋值,然后在操作,这是java的规定
局部变量的初始化问题。 JAVA语言对于局部变量默认是不初始化的。即int i ;只是声明了int类型的引用。而System.out.println(i); 将调用了toString(i)方法,但 i 仅是个索引 。 所以不能通过编译
java中的局部变量必须得赋值的,只有类的成员变量可以只声明,不赋值,但是编译器自动赋初始值的。
楼上说的都对,这就是Java与C的不同之处,局部变量使用前需赋初值,要不然局部变量会得到一些随机的值,而类成员变量即时不赋初值,
在Java编译器中,会赋予默认值,如 int是0,String是null等等。许多 C++编译器会对变量未初始化发出警告,但在 Java 里却是错误。
你看你代码编译的时候就报错了,运行肯定会报错啊,局部变量你要先给变量一个初始值,全局变量就不用赋初始值了