博客
关于我
关于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/

    你可能感兴趣的文章
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>