首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >未初始化和初始化为null有什么区别?

未初始化和初始化为null有什么区别?
EN

Stack Overflow用户
提问于 2010-11-10 22:54:17
回答 2查看 7.9K关注 0票数 18

我有这样的代码:

代码语言:javascript
复制
MyClass object;

.... some code here where object may or may not be initialised...

if (object.getId > 0) {
    ....
}

这会导致编译错误:object可能尚未初始化,这是很公平的。

现在我将我的代码更改为:

代码语言:javascript
复制
MyClass object;

.... some conditional code here where object may or may not be initialised...

if (object != null && object.getId > 0) {
     ....
}

我得到了同样的编译错误!我必须将object初始化为null:

代码语言:javascript
复制
MyClass object = null;

那么不初始化对象和初始化为null有什么区别呢?如果我在没有初始化的情况下声明一个对象,它不是空的吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2010-11-10 22:59:56

这是一种语言定义的东西。

该语言规定,方法作用域的变量必须手动初始化--如果希望它们以NULL开始,则必须明确说明--如果不能这样做,它们基本上处于未定义的状态。

相反,该语言规定CLASS作用域的变量不需要手动初始化--初始化失败会导致它们自动初始化为NULL --因此您不必担心这一点。

至于两种状态(null和undefined)之间的区别,是的,它们基本上是相同的--但是语言规定您需要初始化一个变量(根据变量的作用域,这是否自动为您完成)。

票数 3
EN

Stack Overflow用户

发布于 2010-11-10 23:00:07

object的声明实际上是对堆上MyClass实例的指针或引用的声明。如果你没有初始化指针,你就会得到一个随机指向的指针。通过显式地将指针初始化为NULL,您可以将其设置为指向编译器知道是无效的NULL地址。

在Java中引入了额外的混淆,因为它隐式地将成员变量初始化为NULL。

如果您使用过像C++这样的低级语言,它会更有意义一些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4145732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档