大多转载自 百度知道,个人整理以便日后阅读。

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(),没compareTo
Object是根类,它有的方法,其他类都可以继承,使用.所以.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;
}

java中equals和compareTo的区别---解惑的更多相关文章

  1. Java中equals和hashcode的区别?

    Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用 ...

  2. Java中equals和==之间的区别

    今天在写表达式求值的时候,发现了equals和==||!=和!equals()之间是不一样的. 我就从网上搜了搜关于这方面的知识,然后在下面做一个总结: Java中有两类数据类型: 基本数据类型(Pr ...

  3. (转)java中equals和等号(==)的区别浅谈

    java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==) ...

  4. 简述java中equals()方法和==的区别

    ==与equals的主要区别是: ==: ==常用于比较原生类型(基本数据类型):byte,short,char,int,long,float,double,boolean,比较的是他们的值. 若用= ...

  5. java中equals与==号的区别

    1.==号对于基本数据类型来说,比较的是值,对于引用数据类型来说比较的是地址值 2.equals方法在object类中,比较的是地址值,但是String类重写了Object类中的equals方法,所以 ...

  6. Java中BigDecimal的equals与compareTo的区别

          有个是否为零的判断[BigDecimal.ZERO.equals(ratio)]我用了BigDecimal的equals方法,结果,判断失败,因此特地分析一下equals与compareT ...

  7. Java中equals与==和comparaTo的区别

    一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...

  8. java中equals和==的区别 (转)

    java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引 ...

  9. 【转】Java中equals和==的区别

    [转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boole ...

随机推荐

  1. 第一阶段,第二阶段,第三阶段团队github更新项目地址

    第一阶段:https://github.com/yuhancheng/stage-1--last-sprint 第二阶段:https://github.com/yuhancheng/stage-2-- ...

  2. 【转】STM32 独立看门狗简介

    STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效. 看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种 ...

  3. vue props 用法(转载)

    前面的话 组件接受的选项大部分与Vue实例一样,而选项props是组件中非常重要的一个选项.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props ...

  4. node多文件处理方法

    let events = require('events'); let fs = require('fs'); // 将readfile封装成一个方法 多文件处理  function fnreadFi ...

  5. php 历史版本下载地址

    PHP 3.* 版本到 7.* 版本下载地址 http://www.php.net/releases/

  6. C++ 类的静态成员变量及静态成员函数

    ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...

  7. python 深入浅出装饰器(decorator)--举的例子关于星级争霸2(starcraft2)

    其实早就想写一篇深入浅出装饰器的文章,苦于一直没有找到很好的例子描述,自己除了在写api参数检测和日志打印的时候用到以外,其他地方也没有什么重度使用所以一直没有写. 我不会讲解装饰器的理论,还有各种基 ...

  8. linux下拷贝文件夹的时候排除其中的一些目录

    http://blog.csdn.net/wind19/article/details/8960574 使用find cd /usr find ./tmp/ | grep -v tmp/dirc | ...

  9. 10 月 30 日新款 Mac mini 有望与新款 iPad Pro 一起发布

    苹果最新款的 Mac mini 是在 2014 年 10 月推出的版本,到现在已经过了 4 年.分析师郭明錤和彭博社的 Mark Gurman 都表示苹果会在今年晚些时候发布新款 Mac mini. ...

  10. BZOJ4652 NOI2016循环之美(莫比乌斯反演+杜教筛)

    因为要求数值不同,不妨设gcd(x,y)=1.由提示可以知道,x/y是纯循环小数的充要条件是x·klen=x(mod y).因为x和y互质,两边同除x,得klen=1(mod y).那么当且仅当k和y ...