java中为什么有的变量声明而不赋值?而有的就值,那什么情况下要赋值,什么情况下不赋值
比如对象变量,而调用这个变量的构造函数非常耗费时间,所以我们等用到的时候再创建,如果程序运行完都不访问它,就根本不创建,这样可以提高效率。
对于简单变量,比如int float一类的,建议随手给一个初始值。
当然可以了,一般不需要一开始就赋值的,就可以等后面再赋值,如果是一开始就赋值,并且后面不会改变(比如某个标记)就可以用static final修饰。
有些语言中,简单类型不赋值则会使用一个默认的值(比如int会默认为0)
你这个问题给你举个例子,你应该就能理解了
例如: int a; 这是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向。
就是说只会在内存中创建一个 a;而这个a并没有指向任何指向,是没有空间的。
而 int a =0; 这样会在内存的栈区创建引用,并且a这个对象指向0,这样就会占有内存空间的;
所有我就简单的跟你讲一下什么时候需要赋值,什么时候不需要赋值吧。
当你定义的这个变量被多个地方应用的时候,而这些引用中有的值可能无法给这个变量赋值,
还是上面这个例子
我们 int a;
在我们的代码一个部分中我们给他赋值 a =10;
而另外一个地方又给这个a负责,但这个a的值是从数据库拿出来的,这中间有很多情况,而拿到的是空值,这个时候是不是就有问题呢,会报空指针。
所以必须要初始化一个,一般都是int a=0;
同理,如果你你要给a赋值都是固定的,或者你可以确定这里值都能拿到,那么你声明的时候肯定用int a;
这样讲你能明白吗?
局部变量需要在声明的时候需要可以赋值或者不赋值,但是在使用这个局部变量之前一定要赋值
对于类的成员变量再声明的时候可以赋值或者不赋值,如果没有赋值,在使用的时候就会使用默认的值,例如: int 类型 默认值为0
对于使用final 关键字声明的变量必须赋初值 final int i=10;