java中的==和equals的区别

来源:互联网 发布:手机淘宝如何注册店铺 编辑:程序博客网 时间:2024/06/07 10:54

今天在做项目中发现一个Java基本的知识点,filterStr 从数据库中读出为"',执行下面的结果竟然为true

String filterStr = SystemConfigUtils.getSystemConfig(SystemConfigUtils.FILTERCOMMENTTEXT);
if(filterStr!=null&&!""!=filterStr){
filters = filterStr.split(";");
}

这个让我突然理解不了了,仔细研究才发现一个基本的问题,就是== 和equals的简单理解为,
(1)八种基本数据类型,boolean 、byte、char、short、int、long、float、double、他们之间的比较,应用双等号(==),比较的是他们的值。

(2)对于复合类型或者Java类,==比较的是内存地址,equals比较的也是内存地址,但是如String,Integer,Date在这些类中equals的方法被覆写了,比较的是数据值。因此 对于复合数据类型的equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

因此将上面改为:

String filterStr = SystemConfigUtils.getSystemConfig(SystemConfigUtils.FILTERCOMMENTTEXT);
if(filterStr!=null&&!"".equals(filterStr)){
filters = filterStr.split(";");
}

0 0