java中的==和equals的区别
2017-04-21 12:01
225 查看
今天在做项目中发现一个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(";");
}
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(";");
}
相关文章推荐
- 看到一篇文章《==与equals()的区别》(java)
- java中的equals()与==的区别
- java中equals与==的区别
- java中两个字符串“Equals”和“==”的区别
- java中equals和==的区别
- JAVA中的equals和==的区别
- java :两个对象相等equals和==的区别
- Java ==与equals()的区别
- JAVA中的equals和==的区别
- java中equals方法和“==”的区别:(转)
- 再说java中的equals和==的区别
- java语言中的两种比较 == 与 equals的区别
- java中“==”与“equals”的区别
- Java中关于==和equal的区别 以及equals()方法重写
- Java equals 和== 区别
- Java 中== 和 equals 的区别
- Java中"equals"和"=="的区别
- java中“==”与“equals”的区别
- Java中== 与 equals的区别
- Java中"equals"和"=="的区别