Java 分配给null的变量和其他未分配的变量之间有什么区别

Java 分配给null的变量和其他未分配的变量之间有什么区别,java,Java,分配给null的变量与java中未分配的其他变量之间有什么区别 我知道方法的块中存在差异,这意味着我可以使用初始化为null的变量,但不能使用未初始化的变量 你能告诉我为什么吗 编辑: 感谢所有回答的人 我的问题是关于记忆中引用的行为和形式,它是明确的意图还是暗示。如果没有将对象设置为任何可能已忘记的对象,编译器会提醒您。如果显式设置为null,则编译器确信您做出了选择。此外,对于某些类型,未设置的值可能是NULL以外的其他内容,因此允许编译器做出选择是危险的(C.F.C++默认的问题在实现之间

分配给null的变量与java中未分配的其他变量之间有什么区别

我知道方法的块中存在差异,这意味着我可以使用初始化为null的变量,但不能使用未初始化的变量

你能告诉我为什么吗

编辑: 感谢所有回答的人


我的问题是关于记忆中引用的行为和形式,它是明确的意图还是暗示。如果没有将对象设置为任何可能已忘记的对象,编译器会提醒您。如果显式设置为null,则编译器确信您做出了选择。此外,对于某些类型,未设置的值可能是NULL以外的其他内容,因此允许编译器做出选择是危险的(C.F.C++默认的问题在实现之间不同).

分配给
null的变量
表示它没有指向任何未分配
的变量,如果它是局部变量,则表示它甚至还没有初始化

Test t1=null; ----> Not Pointing to any Object 
Test t2; ------> Not even initialized 
如果t2是局部变量,并且您将使用它,那么您将得到编译错误,因为在使用之前的第一次初始化作为默认值不适用于此变量

分配给
null
的变量与未分配的其他变量之间有什么区别

  • 未初始化的变量没有值,甚至
    null
    (这就是它无法读取的原因)
  • 初始化变量确实有一个值(例如
    null
    5
    “hello”
请注意,成员变量会自动获得分配给它们的默认值(引用类型的默认值为
null
)。因此,虽然看起来您可以读取“未初始化”成员变量,但事实上它实际上已初始化。

请参阅:

对于所有引用类型(),默认值为
null

因此,成员变量没有区别,如果不显式地将其分配给
null
,它将被隐式分配。

直接从

已声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,此默认值将为零或null,具体取决于数据类型。然而,依赖这些默认值通常被认为是糟糕的编程风格

下图总结了上述数据类型的默认值

数据类型默认值(用于字段) 字节0 短0 整数0 长0L 浮动0.0f 双0.0d 字符'\u0000' 字符串(或任何对象)null 布尔假

局部变量略有不同;编译器从不为未初始化的局部变量指定默认值。如果无法在声明局部变量的位置初始化它,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误


希望对你有帮助

答案在问题中:一个有一个赋值为
null
,另一个根本没有赋值。请查看
ReferenceType:
    ClassOrInterfaceType
    TypeVariable
    ArrayType