什么是Java中的Null

时间:2016-02-01 05:49:40

标签: java

我对java中的 null 感到困惑。 Book说如果我们声明一个没有初始化的引用类型的变量,该变量将具有默认值 null 。所以我试试这个

import edu.princeton.cs.algs4.*;

public class test
{
     public static void main(String[] args)
    {
         String a;
         StdOut.println(a);
    }
}

然而,java中的错误是因为变量a未初始化。这与a将具有默认值 null

相矛盾

我有另一个困惑,如果我运行下面的代码

import edu.princeton.cs.algs4.*;

public class test
{
    public static void main(String[] args)
    {
         StdOut.println(null+"a");
         StdOut.println("null"+"a");
    }
}

两个代码行都打印 nulla 。那么字符串“null”等于 null 是真的吗?

有人可以帮我清除这两个问题吗?任何建议都有帮助。 THX。

2 个答案:

答案 0 :(得分:4)

  

Book说如果我们在没有初始化的情况下声明一个引用类型的变量,那么该变量的默认值为null。

什么书?这是错的,如果它真的是这么说的话。该语句仅适用于静态和实例变量,而不适用于局部变量。必须在使用前显式初始化局部变量,并且编译器知道你没有这样做,并且给出了编译错误(而不是让程序以未定义的方式执行)。

  

字符串" null&#34>是真的吗?等于空?

String.valueOf(null)确实等于"null"

答案 1 :(得分:1)

您在程序中执行的操作是错误的,就像您要创建局部变量一样,您必须使用某个值初始化它。如果JVM未初始化而不是局部变量,则由JVM将值分配给实例或静态类级别变量。 因此,如果您按如下方式编写代码:

a

这将为您提供null作为输出,因为现在"null"不是本地变量。

  

现在你的第二个问题:String.valueOfpublic static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 之间的关系   的java

如果我们查看null

的java文档
"null"

由此我们可以很容易地看到,如果您尝试获取对象"nulla"的值,它将返回一个非空且值为 $p = [diagnostics.process]::start("notepad.exe", "D:\temp\1mbfile.txt") $p.WaitForInputIdle(5000); 的String。这就是为什么在两种方式中获得相同值的原因$p.HasExited -eq $true

我希望我的回答可以帮助你理解null。