记得大二上课的时候,老师总是说,变量记得初始化初始化,一定要记得初始化。我们从未放在心上,心想这么简单的事情我们一定不会做错。事实证明,问题总是在细节上出现。
刚才我写了这么一段代码,
就不说方法体里面究竟是什么了,执行了process之后a的值仍然是空。因为后面涉及到判断a是否为空的问题,所以就理所当然的把它设置成初始为null了。事实是,如果没有使用new初始化对象,就没有为它分配内存空间,那么在函数体内做的操作都是徒劳。即使为a重新赋值,方法体结束后a始终为空。另外,这里传递的是a引用的真正对象的地址,其真正的对象的变化才会产生是a产生变化。重新将a取另外对象的引用是不行的。
再说说其他变量的问题。我们总是以为某些基本变量的值会默认给予,其实不是的。java确保类中的成员会有一个默认值,而局部变量在不初始化的情况下使用则会报错。几种基本变量类型的初始值如下:
[table]
|基本类型|默认值|
|boolean|false|
|char|'\u0000'(null)|
|byte|(byte)0|
|short|(short)0|
|int|0|
|long|0L|
|float|0.0f|
|double|0.0d|
[/table]
刚才我写了这么一段代码,
ClassA a = null;
process(a);
就不说方法体里面究竟是什么了,执行了process之后a的值仍然是空。因为后面涉及到判断a是否为空的问题,所以就理所当然的把它设置成初始为null了。事实是,如果没有使用new初始化对象,就没有为它分配内存空间,那么在函数体内做的操作都是徒劳。即使为a重新赋值,方法体结束后a始终为空。另外,这里传递的是a引用的真正对象的地址,其真正的对象的变化才会产生是a产生变化。重新将a取另外对象的引用是不行的。
再说说其他变量的问题。我们总是以为某些基本变量的值会默认给予,其实不是的。java确保类中的成员会有一个默认值,而局部变量在不初始化的情况下使用则会报错。几种基本变量类型的初始值如下:
[table]
|基本类型|默认值|
|boolean|false|
|char|'\u0000'(null)|
|byte|(byte)0|
|short|(short)0|
|int|0|
|long|0L|
|float|0.0f|
|double|0.0d|
[/table]