java中equals和compareTo的区别---解惑
来源:互联网 发布:java中非线程安全的类 编辑:程序博客网 时间:2024/06/01 09:19
大多转载自 百度知道,个人整理以便日后阅读。
value1.compareTo(value2) == 0
value1.equals(value2)
equals的效率高些,compareTo其实就是按照编码的数值求差值,根据差值进行比较,它能确定两个String在字典顺序上的前后性,当你只是想知道是否一致时,用equals也行,效果一样。另外,equals是Object的方法,要求涉及到比较操作的继承类要自己重写该方法,所以String重写了equals,而compareTo为String的方法。所以:value1.compareTo(value2),当value1不为String类型时,会报错。而value1.equals(value2),都会进行比较。
实现了Comparable接口的类才有compareTo方法,有了就可以用, 所有已知实现类: Authenticator.RequestorType, BigDecimal, BigInteger, Boolean, Byte, ByteBuffer, Calendar, Character, CharBuffer, Charset, ClientInfoStatus, CollationKey, Component.BaselineResizeBehavior, CompositeName, CompoundName, Date, Date, Desktop.Action,String .....很多~但是Object类 只有.equals(),没compareToObject是根类,它有的方法,其他类都可以继承,使用.所以.equals 基本随时能用.
/** * 实现Comparable接口,重写compareTo方法,返回值1,0,-1 * 覆写compareTo方法就是重建排序规则 */ public int compareTo(Object obj) { Person p = (Person) obj; if (p.score > this.score) { return 1; } else if (p.score < this.score) { return -1; } else { // 如果成绩相等则判断年龄 if (p.age > this.age) { return 1; } else if (p.age < this.age) { return -1; } else { return 0; } } }
1. == : 基本数据类型都用这个比较,Java里面包含8个基本数据类型,分别是:boolean、byte、char、short、int、float、double、long注意String 可不属于基本数据类型,它是个类...
2..equals() 用于引用数据类型(除了上面的8个,都是引用数据类型,包括封装类,Object子类等), 比较是否指向相同的对象, 例如 String str = "abc"; 等效于: char data[] = {'a', 'b', 'c'}; String str = new String(data); 就是str 指向了 new String(data) 这个对象. 如果再有其他变量也指向这个对象,他们比较的结果就返回true;由于此方法在Object里, 所以它有很多重写, 具体要看说明;另外``` equalsIgnoreCase()可以忽略大小写;
Object和String的equals()实现存在区别,所以上面的例子不太友好。有demo在最后
3. compareTO可以比较两个字符串并且得到顺序.按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
String类 equals和compareTo源码分析:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; } public int compareTo(String anotherString) { int len1 = count; int len2 = anotherString.count; int n = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; if (i == j) { int k = i; int lim = n + i; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } } else { while (n-- != 0) { char c1 = v1[i++]; char c2 = v2[j++]; if (c1 != c2) { return c1 - c2; } } } return len1 - len2; }
object 的默认equals实现:
public boolean equals( Object o2 ){ this == o2;}
0 0
- java中equals和compareTo的区别---解惑
- java中equals和compareTo的区别---解惑
- Java equals compareTo()的区别
- java中BigDecimal的equals与compareTo的区别
- Java中equals()、==、compareTo()的区别
- 在Java 中,关于String的 compareTo()、equals()和== 的区别
- java String对象中‘==’,equals与compareTo函数的使用和区别
- equals、compareTo、hashCode()的区别
- compareto与equals的区别
- java.lang.String中equals(Object anObject)与compareTo(String anotherString)的区别
- 关于 compareTo() , equals,和==使用上的区别
- Java_tips1:compareto(),equals()和==区别
- java中hashcode和equals的区别
- java中equals和equalsignorecase的区别
- java中compare和equals的区别
- Java中hashCode和equals的区别
- Java中equals()和contains()的区别
- java中equals()和equalsIgnoreCase()的区别
- 让emacs显示行号
- javascript Date format(js日期格式化)
- FileReference.Load 加载时,文件过大,IE内核浏览器会报:Error: Error #1000: 系统内存不足。
- 不开额外空间,交换A,B的值
- SQL Server Order by在union子句不可直接使用的原因
- java中equals和compareTo的区别---解惑
- C++ Concurrency in Action 书籍阅读
- A页面触发B页面事件
- linux下控制CPU不降频命令
- NYJO71&南阳理工oj_71(独木舟上的旅行) (贪心)
- 红黑树详解
- 大家一块来
- Oracle查看连接数并修改
- CreateDialog并关闭二级页面刷新父级页面