什么意思是null指向什么都没有,为什么要使用null呢?

Yve*_*omb 1 java null pointers

关于null和java有很多问题.

我没有意识到的是人们所说的null是什么意思,或者为什么要使用null.

我无法理解之间的区别

String thing = null;
Run Code Online (Sandbox Code Playgroud)

String thing = "";
Run Code Online (Sandbox Code Playgroud)

这个问题有详细解答Java中的null是什么?,但我无法绕过它.

我错过了什么?


我学过的语言(没有专家)

Python,vb(vb.net),网络编程(html,css,php,bit of js),sql

我应该补充一下,这是答案/sf/answers/1378794091/,这促使我写这个.

Adr*_*hum 6

String str = null;
Run Code Online (Sandbox Code Playgroud)

表示名为str的String引用,不指向任何内容

String str = "";
Run Code Online (Sandbox Code Playgroud)

表示名为str的String引用,指向实际的String实例.对于该String实例,它是一个零长度的String,但它仍然是一个实际的对象.


只需稍微更新一些图表,希望可以帮助您想象:

假设我有

String nullStr = null;
String emptyStr = "";
String myStr = "ab";
Run Code Online (Sandbox Code Playgroud)

它在概念上是什么样子:

  // String nullStr = null;

  nullStr ----------> X    pointing to nothing



  // String emptyStr = "";
                      +------------------+
  emptyStr ---------> |       String     |
                      +------------------+
                      | length = 0       |
                      | content = []     |
                      +------------------+


  // String myStr = "ab";
                      +------------------+
  myStr ------------> |       String     |
                      +------------------+
                      | length = 2       |
                      | content = [ab]   |
                      +------------------+
Run Code Online (Sandbox Code Playgroud)

(当然,String对象的内部结构不是Java中的真实内容,它只是为了给你一个想法)


更多编辑NULL背后的基本原理:

事实上,在某些语言中,它们不提供NULL的概念.无论如何,在Java(或类似语言)中,Null在语义上与 "空"对象不同.使用String作为示例,我可能有一个People具有String preferedTitle属性的类.一个NULL preferedTitle意味着有NO优选用于人的标题(这样我们就需要派生并显示标题,也许),而preferedTitle作为一个空字符串意味着IS首选标题,而这深藏不露.

顺便说一句,虽然有点偏离主题:Null的概念被认为对某些人来说是有问题的(因为它需要所有那些额外处理等).因此,一些语言(例如Haskell)正在使用一些其他方法来处理我们曾经使用Null的情况.