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/,这促使我写这个.
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的情况.