为什么equals方法可以传入null值,而compareTo方法不能传入null值?

问题描述

自然排序下TreeSet和TreeMap都是使用compareTo方法来防止元素重复,而compareTo方法不能传入null值,会出现空指针异常,让比较的对象指向了一个null值。使用比较器排序,TreeSet和TreeMap可以传入有且仅有一个null值,传入第二个会报空指针异常。总结:compareTo方法是使得TreeSet和TreeMap在自然排序下不能传入null值的罪魁祸首问:为什么equals方法可以传入null值,而compareTo方法不能传入null值?

解决方案

解决方案二:
compareTo()方法是用于比较两个对象的大小,如果传入NULL值,由于NULL不能与任何对象比较大小(NULL不等于任何对象)所以向compareTo方法传入NULL值会出现空指针异常;但是equal()是方法是用于比较两个对象是否相等,当equals()方法传入参数为NULL时是判断字符串是否为空,所以equals()方法可以传入NULL(但是不能试用null.equals("字符串"))。

时间: 2024-07-29 01:21:36

为什么equals方法可以传入null值,而compareTo方法不能传入null值?的相关文章

axis2发布webservice-spring注入的问题,set方法会调用并且有值,但是调用后变成null值

问题描述 spring注入的问题,set方法会调用并且有值,但是调用后变成null值 我用set方法注入,用axis2发布了webservice,在服务启动的时候,相应的set方法会注入进去,但是当我调用方法的时候,本来注入到方法里的属性就会变成了null. 配置文件 就是一层一层的注入的 <!-- 创建SqlSessionFactory,同时指定数据源--> <bean id="sqlSessionFactory" class="org.mybatis.s

sql NULL值的处理方法

sql null值的处理方法 sqlserver 中isnull的用法一例 数据库教程中有一列记录文章的访问次数.我现在要实现的功能是,每刷新一次页面. 访问次数+1.sql语句,art_count为访问次数,int类型. update article set art_count="(art_count+1) where art_id="3 但如果art_count为null,则不起作用. 如果是oracle用decode可以很容易的实现此功能.sqlserver中如何实现类似的功能呢

JS子父窗口互相操作取值赋值的方法介绍_javascript技巧

$("#父窗口元素ID",window.parent.document); 对应javascript版本为window.parent.document.getElementByIdx_x("父窗口元素ID"): 取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document); 类似的,取其它窗口的方法大同小异$(se

OpenCV中读取视频帧像素值的一般方法

OpenCV中读取视频帧像素值的一般方法可以分为以下几个步骤: 1.打开AVI格式的视频 CvCapture *capture=NULL; IplImage *img=NULL; capture = cvCaptureFromFile("E:\\Sequence_mask\\crossroad.avi"); if(!capture) { cout<<endl<<"failed to open mask file"<<endl; r

多选操作时用的复选框,有关验证与取值,求解方法哪里不对,也是找来的代码

问题描述 多选操作时用的复选框,有关验证与取值,求解方法哪里不对,也是找来的代码 表单如下: 全选ABCDEF 全选及验证javascript如下: function checkAllBox(obj){ var answer= document.getElementsByName(""answer""); if(obj.checked==true){ for(var i=0;i<answer.length;i++){ answer[i].checked = t

方法-java中怎么像C一样改变参形参的值呢?

问题描述 java中怎么像C一样改变参形参的值呢? 如何实现呢?基本类型又没有引用,只能通过设置get set 这类的方法来改变吗? 小白求指导 解决方案 改是能改,用反射,不过不建议. 类似http://blog.csdn.net/danielinbiti/article/details/44907625 还是改变C的写法习惯,要习惯基本类型形参不能变,反正不能变所有问题也能解决. 解决方案二: 包装成一个对象或者用数组传入 解决方案三: java传递的参数有两种方式,普通类型如int,Str

MySQL 处理插入过程中的主键唯一键重复值的解决方法_Mysql

本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IGNORE 使用ignore当插入的值遇到主键(PRIMARY KEY)或者唯一键(UNIQUE KEY)重复时自动忽略重复的记录行,不影响后面的记录行的插入, 创建测试表 CREATE TABLE Tignore (ID INT NOT NULL PRIMARY KEY , NAME1 INT )d

JavaScript设置、获取、清除单值和多值cookie的方法_javascript技巧

废话不多说了,直接给大家贴代码了. 具体代码如下: var CookieUtil = (function () { var Cookie = function () { // 获取单值cookie this.get = function(name) { var start = document.cookie.indexOf(encodeURIComponent(name)) ; var end = document.cookie.indexOf(';', start) ; if(end == -

JavaScript中去掉数组中的重复值的实现方法_javascript技巧

复制代码 代码如下: 题目:要求写一个函数,去掉给定数组中的重复值. 如: 传入数组 a = [0, 8, 5, 4, 78, 8, 90, 4, 'a', 'b', 'a']; 要求返回:[0,4,5,8,78,90,a,b] 对于这个题目,在面试之后也想了好多次,不过一直没能想出一个时间复杂度较低的方法.昨天下午在宿舍看<JavaScript语言精粹>看到一个书中的一段代码有所触发,于是在jsfiddle上测试了,成功.代码如下(完整版参见jsfiddle) 复制代码 代码如下: var