`

如何比较两个有可能为null的实例

    博客分类:
  • Java
JDK 
阅读更多
       以前在写程序的时候,碰到需要比较两个有可能为null的实例时,为了避免出现NullPointerException,经常用这样的一段代码来比较:

     Object obj1 = "abc";
     Object obj2
= "cde";
    
    
if ((obj1 == null && obj2 == null) || (obj1 != null && obj1.equals(obj2))
        
|| (obj2 != null && obj2.equals(obj1))) {
       System.
out.println("equals");
     }

       这样的程序,读起来真是挺拗口。我一直没有想到什么好的方法解决这个问题,直到今天在看到JDK的AbstractList源码的equals方法的实现时,看到这一段:

        if (!(o1==null ? o2==null : o1.equals(o2)))
        
return false;

       原来用三元运算符可以很好的解决这个问题,呵呵,我前面的程序可以改写成:

     Object obj1 = "abc";
     Object obj2
= "cde";
    
    
if (obj1 == null ? obj2 == null : obj1.equals(obj2))
       System.
out.println("equals");

       真是简洁多了!
分享到:
评论

相关推荐

    C#使用Equals()方法比较两个对象是否相等的方法

    默认情况下,`Equals()` 方法会比较两个对象的内存地址,看它们是否指向同一个实例。如果两个对象是同一个实例,那么`Equals()`返回 `true`;否则,返回 `false`。例如,如果你有两个字符串对象,即使它们包含相同的...

    如何禁止程序同时运行两个实例C#.net源代码编写

    在C#.NET编程中,有时候我们希望确保一个应用程序只能运行一个实例,禁止...在压缩包文件"C#2010-03-11- 如何禁止程序同时运行两个实例"中,可能包含了使用Mutex的方法实现这一功能的详细源代码示例,你可以参考学习。

    多个实例同时运行 多实例编程 多线程 vc 源码

    在IT行业中,多实例编程和多线程是两个重要的概念,尤其在开发高效能的应用程序时,它们常常被用来优化程序性能和并发处理能力。在Windows环境下,VC++(Visual C++)是一种常用的编程工具,它支持这两种技术的实现...

    软件体系结构实验之单类有限个实例

    然而,这个实验将这一模式扩展到了可以创建有限个实例,这可能涉及到了对象池的概念。 对象池是一种内存管理技术,用于减少创建和销毁对象的开销。当一个对象在使用后不是立即被销毁,而是暂时存储在池中,以便后续...

    ATL对话框m_hWnd为NULL

    6. **依赖问题**:VB6Client和VS2005_UPO_I2CSvr这两个文件可能涉及到对话框的客户端和服务器端交互。如果它们之间的接口或通信方式出现问题,也可能导致对话框创建失败。检查接口定义(如NBInterface.tlb中的内容)...

    两个常用的上传的实例

    标题中的“两个常用的上传的实例”表明这是一篇关于文件上传技术的文章,可能涉及Web开发中的文件上传功能。在IT领域,文件上传是常见的交互方式,尤其在网站和应用程序中,用户经常需要上传图片、文档等文件。这篇...

    Android 实现两个Activity跳转实例

    例如,从Activity A跳转到Activity B,可以在Activity A中创建一个Intent实例,指定目标Activity(即Activity B)并启动它: ```java Intent intent = new Intent(A.this, B.class); startActivity(intent); ``...

    php 100个小实例

    4. 数组:PHP中的数组可以存储多个值,有索引数组和关联数组两种形式。实例会展示如何声明、遍历和操作数组,例如使用`foreach`循环。 5. 字符串操作:PHP提供了丰富的字符串处理函数,如`strpos()`查找子串位置,`...

    android短信发送实例

    第一个参数是接收者的电话号码,第二个参数是短信内容,最后两个参数通常用于处理发送状态的回调,这里设置为null,表示不监听发送状态。 为了调用这个方法,可能需要一个按钮触发事件,如下所示: ```java Button ...

    单实例模式介绍及应用

    在Java中实现单实例模式通常有两种方式: 1. 饿汉式(静态常量):在类加载时就创建实例,确保线程安全,但可能会造成资源浪费。 ```java public class Singleton { private static final Singleton INSTANCE = new...

    MySQL NULL 值处理实例详解

    3. **比较操作符**:这个操作符在MySQL中也被称为“模糊等于”或“NVL”运算符,它会把两个NULL值视为相等。例如: ```sql SELECT ('value1' <=> 'value2') AS result1, (NULL <=> NULL) AS result2; ``` 上述...

    linux 一个简单队列实例

    在这个“Linux一个简单队列实例”中,我们将探讨如何在Linux环境下实现一个基础的队列,并涵盖入队(enqueue)和出队(dequeue)这两个基本操作。 一、队列数据结构基础 队列的基本结构通常包括头部(front)和尾部...

    jackson 实体转json 为NULL或者为空不参加序列化(实例讲解)

    然而,在进行这种转换的过程中,常常会遇到一些问题,例如当Java对象的某个属性值为null时,我们可能不希望这个属性在JSON中出现。针对这个问题,本文将介绍两种方法,可以使得在使用Jackson进行序列化时,实体对象...

    利用Type动态创建类实例(C#反射)可以演变抽象工厂

    在给定的标题“利用Type动态创建类实例(C#反射)可以演变抽象工厂”中,我们可以看到两个主要概念:Type和抽象工厂模式。下面将详细解释这两个知识点以及它们如何相互关联。 1. Type: C#中的Type类是System....

    单例模式讲解说明与实例

    例如,在计算机系统中,每台计算机可以有若干个打印机,但只能有一个 Printer Spooler,以避免两个打印作业同时输出到打印机中。 下面是一个经典的单例实现: ```java public class Singleton { private static ...

    c# 更改不同服务器两个表保持一致

    创建两个DataTable实例,分别填充来自两个服务器的表的数据。然后,可以通过DataTable的`Select()`方法和Linq查询来找出两个表之间的差异。 ```csharp DataTable table1 = LoadTableFromServer1(); DataTable ...

    VC定时器事件,很简单的实例

    在Windows API中,有两个主要的定时器类型:`SetTimer`函数创建的非精确定时器和`CreateTimerQueueTimer`函数创建的精确定时器。在这个实例中,我们可能使用的是`SetTimer`,因为它更适合于简单的GUI应用程序。 1. ...

    JavaScript undefined及null区别实例解析

    `null` 和 `undefined` 在比较时有共同之处,它们在相等性检查中会被视为相等: ```javascript console.log(null == undefined); // true ``` 这使得在某些情况下,我们可以通过比较 `null` 或 `undefined` 来判断...

    rabbitmq(java实例)

    在RabbitMQ中,我们主要通过`ConnectionFactory`和`Channel`两个关键对象来与消息队列进行交互。`ConnectionFactory`用于创建连接,`Channel`则是实际发送和接收消息的对象。下面是一个简单的生产者示例,它将发送一...

    linux下C语言多线程编程实例

    5. `pthread_equal()`: 比较两个线程ID是否相等。 6. 同步机制:`pthread_mutex_t`互斥量,用于保护临界区;`pthread_cond_t`条件变量,用于线程间的同步;`pthread_rwlock_t`读写锁,用于读多写少的情况。 三、多...

Global site tag (gtag.js) - Google Analytics