定义局部变量加不加null有什么区别

来源:百度知道 编辑:UC知道 时间:2024/05/29 11:12:52
Man jack=null;

Man jack;

这两种定义在效果上区别吗,为什么大家都习惯加个null
keniov - 经理 五级 说的对, 所以我说,为什么很多人习惯加个null。
java2000_net - 经理 五级 一个是未初始化,一个是空指针。为什么强烈建议第一个,请举例

加null和不加null没有本质的区别.
(因为Java里,无论如何,变量都必须先初始化,再使用,以保证安全,所以后面的语句里必然会有 jack = new Man() 或是jack = ManFacory.getMan() 这样的语句)

不加null
Man jack 表示声明了一个jack的变量 只知道你的jack是一个引用Man类型的变量,但是实际是它没有任何的值.

Man jack = null; 声明了一个jack的变量, 但是它的值为null.也就是空.(注意,这里null也认为是一个值,只不过是个表示空的值,和上面的空是有差别的.)

如果硬要说它们有什么区别的话.哪是这样的
如果你的代码是这样写的:
//比如Man 类有一个方法sayName() 它返回一个字符串类型,表示自已的名字
Man jack
jack.sayName();
这样写编译器会报错,编译都通不过. 因为jack从来没有初始化过,而又要使用jack的方法,由于jack没有引用任变量.所以编译器认为你语句有误.

Man jack=null;
jack.sayName();
这样写编译器可以让你通过,但是运行时报NullPointer错误.因为java编译器认为jack有初始值(只不是是空值null).所以可以通过,不认为是你误句有误.

错误(准确的说,应该是异常)是在执行时才被发现的.

而我们写程序时,尽早发现错误并加以解决,是一条软件测试的原则. 所以如果有错误,最好是让它编译时就都通不过, 而不是到运行时,通地抛异常来发现.

所以.我的意见和上面几位回答者相左.
Man jack = new Man();
这样是最好的习惯.声明时就把它初始化.

但是如果就 Man jack =null 和 Man jack; 相比. 加一个null根本就没有意义,只会骗过编译器.反而把由忘记初始化变量而造成的程序运行异常的危险留到了运行时. 增加了调试的工作量.