gpt4 book ai didi

java - 如果 null 可以分配给任何引用类型,为什么它不是 Java 中的对象?

转载 作者:行者123 更新时间:2023-12-01 08:54:48 30 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题.

去年关闭。




Improve this question




我的第一个问题是空文字是否有引用类型?我很困惑 null 是否没有引用类型,或者 null 文字确实有数据类型,但没有名称。无论哪种方式作为文字,null 都可以是任何引用类型。如果 null 可以分配给任何 Object 类型,为什么 null 不能是对象本身?在 Java 中,甚至字符串文字本身也是一个对象。每个引用类型都可以在Java中创建一个对象,那么不应该同样应用于null吗?

最佳答案

不幸的是,在许多关于 Java 的教程、书籍和其他资源中,术语“对象”和“变量”的使用很草率,这可能会导致类似于您在问题中描述的混淆。
例如,看这行代码:

String message = "Hello World";
人们经常会说“我有一个名为 Stringmessage 对象,这里的值是 "Hello World”。这是错误的,它使初学者认为对象和变量是一回事,并且对象有名称。
准确的是:“我有一个名为 message 的变量,它是对 String 对象的引用,其值为 "Hello World"
变量和对象不是一回事。变量* 不是对象,它是对对象的引用(它是指向内存中某处对象的指针)。
变量有名字。在上面的代码中,有一个名为 message 的变量.对象没有名称。
变量和对象之间也不是一一对应的。多个变量可能引用同一个对象。
null是一个可以分配给变量的特殊值*,表示“此变量不引用任何对象”。它就像 C 和 C++ 等语言中的空指针。
谈论 null真的没有意义作为一个对象。它不是一个对象,它是一个特殊的引用值,可以使变量引用“无对象”。

If null can be assigned to any Object type


这就是为什么我怀疑您对对象和变量之间的区别感到困惑:您没有分配 null到一个对象,但到一个 变量 (“任何对象类型”与“非原始类型”相同)。
*:我们在这里谈论的是非原始类型的变量
更高级的理解:
null有一点 bad reputation (这是许多错误的原因)。您可能想使用 java.util.Optional 帮助防止 null 出现的一些问题原因。
另见 null object pattern ,这是一种关于拥有一个代表“空值”的特殊对象的想法的设计模式。这在特殊情况下可能很有用。

关于java - 如果 null 可以分配给任何引用类型,为什么它不是 Java 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62986161/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com