博客
关于我
关于java 中 的 null。
阅读量:755 次
发布时间:2019-03-23

本文共 1505 字,大约阅读时间需要 5 分钟。

null在Java编程中一直是一个容易引发争议的话题。很多开发者一看到null就立刻认为这段代码有问题,但实际上,null并不是问题,它只是一个值得尊重的存在。下面,我们将深入探讨null的三大特性,以及它在Java开发中的实际应用场景。


Null不是对象,这很简单

Java中,null不是一个对象,因为它不继承自java.lang.Object。以下代码会让许多人感到困惑:

String str = null;obj = new String();if (str instanceof Object) {    // 该代码不会运行,因为null instanceof java.lang.Object返回false}

null的特殊性不仅体现在类型检查上,还表现在内存管理中。有时候,使用null反而比使用具体的Object类型更灵活。例如:

public class MyClass {    public void start() {        // 这是一个空对象引用        MyClass instance = null;        instance_utc = new MyClass();        // 如果不是特殊情况,以上行为可能导致内存泄漏    }}

虽然看起来有点混乱,但null在某些情况下确实是一个有用的概念。


Null在内存管理中的作用

内存泄漏是开发者每天都要面对的重要问题。而null恰好可以帮助开发者更好地管理内存。例如:

Map
Gesture = new HashMap<>();// 手语识别过程中,可能会产生大量临时对象while (someCondition) { // 使用null表示没有可用的手势数据 Gesture = null; // 轻松地释放内存}

在某些情况下,使用null可以帮助减少内存开销,从而提高程序性能。例如,在物联网设备上,避免使用过多对象可能会节省宝贵的资源。


Null可以作为Map的key来使用

这个特点可能让很多人感到难以理解,但实际上这是一个有用的设计。例如:

Map
data = new HashMap<>();// 添加一个特殊的null键data.put((String) null, "defaultaction");//当map不为空,但key是null时:data.get((String) null) // 返回"defaultaction"

这种设计在某些领域非常有用。例如,在缓存机制中,使用null作为默认值的标识符,可以让程序更容易处理cache-hit和cache-miss。


Null的具体场景和注意事项

尽管null有一些独特的表现力,但需要谨慎使用它。在以下场景中,null非常有用:

  • 避免空对象引用

    当程序不需要任何后续操作时,使用null代替创建对象是更高效的方式。

  • 表示缺失或不确定性

    null可以表示某个值尚未获取或不存在。例如,微信用户的头像URL可能在未加载时为null。

  • 违反单tons设计模式

    如果单tons对象被赋予了null,可能导致逻辑问题。因此,需要谨慎处理。

  • 垃圾回收优化

    在某些情况下,置null可以提前返回内存资源,从而减少垃圾回收的负担。


  • 作为一个编程概念,null在Java中确实有其独特的价值。虽然它的存在可能会让一些开发者感到困惑,但实践中它的应用场景依然多种多样。如果你对null还有更多疑问,可以通过阅读《Effective Java》或相关高级编程书籍来深入了解。

    转载地址:http://jowzk.baihongyu.com/

    你可能感兴趣的文章
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    MYSQL sql语句针对数据记录时间范围查询的效率对比
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    mysql union orderby 无效
    查看>>
    mysql v$session_Oracle 进程查看v$session
    查看>>
    mysql where中如何判断不为空
    查看>>
    MySQL Workbench 使用手册:从入门到精通
    查看>>
    mysql workbench6.3.5_MySQL Workbench
    查看>>
    MySQL Workbench安装教程以及菜单汉化
    查看>>
    MySQL Xtrabackup 安装、备份、恢复
    查看>>
    mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
    查看>>
    MySQL _ MySQL常用操作
    查看>>
    MySQL – 导出数据成csv
    查看>>
    MySQL —— 在CentOS9下安装MySQL
    查看>>
    MySQL —— 视图
    查看>>
    mysql 不区分大小写
    查看>>
    mysql 两列互转
    查看>>