null 是空的意思, 是对象的一个特殊值, 代表没有值.
对象若要值为 null,需要显式赋值
要一个对象的值是 null, 需要显式复制, 否则会编译报错.
比如:
// 会报错
public class NullTest {
public static void main(String[] args) {
String s;
System.out.println(s);
}
}
报错如下:
错误: 可能尚未初始化变量s
System.out.println(s);
^
下面的代码是正确的:
public class NullTest {
public static void main(String[] args) {
String s = null;
System.out.println(s);
}
}
执行结果:
null
null 与 null 是相等的
public class NullTest {
public static void main(String[] args) {
String s = null;
System.out.println(s == null);
System.out.println(null == null);
System.out.println(null != null);
}
}
执行结果:
true
true
false
System.out.println 不能直接输出 null
因为找不到匹配的函数.
示例:
// 会报错
public class NullTest {
public static void main(String[] args) {
System.out.println(null);
}
}
报错如下:
错误: 对println的引用不明确
System.out.println(null);
^
PrintStream 中的方法 println(char[]) 和 PrintStream 中的方法 println(String) 都匹配
下面这个是没问题的:
public class NullTest {
public static void main(String[] args) {
System.out.println(""+null);
}
}
运行结果:
null
System.out.printf 不能直接输出 null
下面的示例会报错:
// 会报错
public class NullTest {
public static void main(String[] args) {
System.out.printf("%s", null);
}
}
报错如下:
警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
System.out.printf("%s", null);
^
对于 varargs 调用, 应使用 Object
对于非 varargs 调用, 应使用 Object[], 这样也可以抑制此警告
1 个警告
下面的示例也会报错:
// 会报错
public class NullTest {
public static void main(String[] args) {
System.out.printf(null);
}
}
报错如下:
Exception in thread "main" java.lang.NullPointerException
null 可以参与字符串拼接
示例1:
public class NullTest {
public static void main(String[] args) {
String s = null;
System.out.println(s + "拼接" + null);
}
}
执行结果:
null拼接null
示例2:
public class NullTest {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
String s = null;
sb.append(s);
// sb.append(null); // 这种写法会报错, 因为匹配不到函数
System.out.println(sb.toString());
}
}
执行结果:
null
null instanceof 的结果为 false
示例1:
public class NullTest {
public static void main(String[] args) {
System.out.println(null instanceof String);
}
}
执行结果:
false
示例2:
public class NullTest {
public static void main(String[] args) {
String s = null;
System.out.println(s instanceof String);
}
}
执行结果:
false
instanceof null 无法编译通过
示例:
// 会报错
public class NullTest {
public static void main(String[] args) {
String s = "a";
System.out.println(s instanceof null);
}
}
报错如下:
错误: 非法的类型开始
System.out.println(s instanceof null);
^