A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乐少 中级黑马   /  2014-4-11 19:21  /  922 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 乐少 于 2014-4-12 23:49 编辑

最近总被比较符号搞蒙,求教“equals","==","compareTo"等比较符和方法他们之间的区别,比如两相同字符串比较,用”==”和“enquls"。求高手详解,感激不尽。。。

点评

这问题已经被问过很多次了,请自己去论坛里看看别人的答案吧  发表于 2014-4-11 20:03

8 个回复

倒序浏览
equals() 比较引用数据类型时使用的比较多,  比较两个对象是否相同,

== 一般用来判断基本数据类型, int long float ……

compareTO可以比较两个字符串,而且可以排序.集合中用的比较多

字符串 String 属于引用数据类型,所以使用 equals方法来比较!

评分

参与人数 1黑马币 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
本帖最后由 Kelvinhu 于 2014-4-11 19:39 编辑

equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。
==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true


==运算符不允许我们进行覆盖,看下以下代码就会知道了:


  1. public class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String a=new String("sss");
  6.                 String b=new String("sss");
  7.             System.out.println(a==b);
  8.             System.out.println(a.equals(b));
  9.         }
  10. }
复制代码

输出结果是falsetrue


那么 String肯定覆盖了equals方法。翻一下看下JDK就知道了。

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
==在比较对象时比较的是对象的内存地址,equals和compareTo都是可以复写的,其功能可以自己定义,
回复 使用道具 举报
Kelvinhu 发表于 2014-4-11 19:38
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相 ...

非常感谢
回复 使用道具 举报
  1. import java.util.*;
  2. public class Demo
  3. {
  4.         //等于号是比较两个对象的引用(哈希值)是否相等
  5.         //equals是Object中的方法,默认是比较引用(也就是哈希值),但是Object的很多子类都复写了它
  6.         //比如String类则是比较字符串的内容
  7.         //compareTo(函数有返回值int)则是是那些以红黑树作为存储结构的集合,在放元素时候要排序时比较用的
  8.         //A.compareTo(B)  如果返回值大于0 则B>A  等于0  B=A   小于0  A<B
  9.     public static void show(Object o)
  10.         {
  11.                 System.out.println(o);//默认调用o对象的toString()
  12.         }
  13.         public static void main(String[]args)
  14.         {
  15.                 //演示:==
  16.                 String a="abx";
  17.                 String b="abx";
  18.                 String c="abc";
  19.                 show(a==b);//true
  20.                 show(a==c);//false

  21.                 //演示 Object的equals  这里的equals和==的作用一样
  22.                 Object a1=new Object();
  23.                 Object b1=a1;
  24.                 Object c1=new Object();
  25.                 show(a1.equals(b1));//true   
  26.                 show(a1.equals(c1));//false
  27.         //比较的是内容
  28.                 show(a.equals(b));//true   
  29.                 show(a.equals(c));//false
  30.                 //演示compareTo
  31.                 TreeSet<String> ts=new TreeSet<String>();
  32.                 ts.add("ddef");
  33.                 ts.add("abc");
  34.                 ts.add("dfgd");
  35.                 ts.add("bccc");
  36.                 show(ts);
  37.         //注:String 实现了Comparable接口复写compareTo方法是按照字典顺序比较大小
  38.         }
  39. }
复制代码

我非常认真的答题,回复帖子,希望版主酌情给分!!
回复 使用道具 举报
乐少 中级黑马 2014-4-12 01:52:57
7#
caijunsong 发表于 2014-4-12 00:06
我非常认真的答题,回复帖子,希望版主酌情给分!!

感谢,哇,这个真详细,茅塞顿开,明白了明白了,谢了,朋友
回复 使用道具 举报
skyfly 中级黑马 2014-4-12 04:20:58
8#
== 和 equals的区别:
==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int  b= 10; a==b,返回为 true。
而对于下面情况:
String  a=new String("abc");
String  b=new String("abc");
a==b; 返回的则是一个false。这是因为,对于对象的比较是对对象引用的比较,对于a和b ,他们在内存中对应的地址是不一样的,所以 a==b 返回的值是一个false.
==操作符并不涉及对象内容的比较。若要对对象内容进行比较,则用equals. 如果 在本例中,a.equals(b)则返回是一个true值。
总而言之,==是对对象地址的比较,而equals是对对象内容的比较。对于基本数据类型,一般用==,而对于字符串的比较,一般用equals。
mpareTo是比较大小的,常用于集合类里面的对象排序,实现一半是继承排序接口,另外就是自己写一个排序类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马