java null总结

作者: 扎Zn了老Fe | 来源:发表于2019-01-30 19:43 被阅读0次

1定义

null 是所有引用类型的默认值。

2. 转换

null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,它还仅仅是一个特殊值,并不属于任何类型,用instanceof永远返回false。
不能将null赋给基本类型变量,例如int、double、float、boolean。如果将null赋值给包装类object,然后将object赋给各自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。
null可以被转化为任何引用类型,可以调用引用类型中的静态方法,但是不可以调用非静态方法,运行时会报错。

public class NullTest {
    public static void main(String[] args) {
        Object o = (Object) null;
        //int i  = null;
        Integer i = (Integer) null;
        String s = (String) null;

        System.out.println("o: " + o + "i: " + i + "s: " + s);  //o: nulli: nulls: null
        System.out.println(o instanceof Object);  //false
    }
}

3. 运算

null==null返回true,被转换为同种类型的null,都返回true,不同类型直接编译报错.
用String转换后的null可以进行字符串运算,这是因为字符串进行连接的时候,编译器对null进行了特别的优化,其实就是例化StringBuilder,在调用append()方法时对null的一个特别处理,当为null时,转化为“null”,最后调用toString()返回一个String对象.
用八大基本类型转换后的null,不可以进行基本类型的运算,否则会出现编译或者运行错误.

public class NullTest {
    public static void main(String[] args) {
        Object o = (Object) null;
        Integer i = (Integer) null;
        Integer j = (Integer) null;
        String s = (String) null;
//        System.out.println(Objects.equals(i, j));
//        System.out.println(i.equals(s));
 //       System.out.println(null == null);
//        i = i + 1;   //运行时空指针

//        System.out.println(2 == null);

        System.out.println("o: " + o + "i: " + i + "s: " + s);
        System.out.println(o instanceof Object);

    }
}

4. 集合中的key

集合类 key value super 说明
HashTable 不能为null 不能为null Dictionary 线程安全
ConcurrentHashMap 不能为null 不能为null AbstractMap 线程局部安全
TreeMap 不能为null 可以为null AbstractMap 线程不安全
HashMap 可以为null 可以为null AbstractMap 线程不安全

hash表需要进行hash值运算,key不能为null好理解,如果map中value为null也好理解。
表中不好理解的是HashMap中key可以为null,看下面代码中对null有个特殊处理,索引位置为0。

image.png
表中第二个不好理解的点是ConcurrentHashMap中value不能为null的问题。
image.png
至于为什么,参考https://laiqitech.com/125/

相关文章

  • Java null 总结

    问:简单谈谈你对 Java 中 null 的理解与认识? 答: null 是 java 的关键字。 null 是 ...

  • java null总结

    1定义 null 是所有引用类型的默认值。 2. 转换 null既不是对象也不是一种类型,它仅是一种特殊的值,你可...

  • NULL-SpringMVC-Java

    Java Null Exception 最大的原因 ------> null 使用失误 1. Java中的Null...

  • 在 Java 8 中避免 Null 检查

    在 Java 8 中避免 Null 检查 原文:Avoid Null Checks in Java 8 译者:os...

  • Java null 强制类型转换

    Java中的null值是可以强制转换为任何Java类型的,就像(Object)null是合法的,但null强转后的...

  • Java null

    可能出现 null 的情况 当字典中key值不存在时,get查找为null 当字典中key值不存在时,get查找为...

  • java中null是对象么

    java中null是对象么 一、null是代表不确定的对象 Java中,null是一个关键字,用来标识一个不确定的...

  • Arrays.asList(s)使用注意

    1,参数为null当 Arrays.asList(null)//会报错:java.lang.NullPointer...

  • Kotlin系列之Kotlin与Java语法区别

    打印日志 Java Kotlin 常量与变量 Java Kotlin null声明 Java Kotlin 空判断...

  • Java中空值或者null的判断

    Java中空值或者null的判断 Java中总是有空值或者null的情况,但是Java和js是不一样的,js中可以...

网友评论

    本文标题:java null总结

    本文链接:https://www.haomeiwen.com/subject/lahcsqtx.html