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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨丽静 中级黑马   /  2014-1-14 23:08  /  1052 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨丽静 于 2014-1-15 23:12 编辑

"=="equals方法究竟有什么区别?我只知道“==”操作符专门用来比较两个变量的值是否相等,equals方法是用于比较两个独立对象的内容是否相同。哪位高手可以做下详细解说,我觉得就这些是不够的

评分

参与人数 1黑马币 +3 收起 理由
黄晓鑫 + 3

查看全部评分

8 个回复

倒序浏览
equals其实底层也是调用==号 用于操作基本数据类型 其实用==号就行了 equlas方法只是用于比较对象的内容的
回复 使用道具 举报
黄晓鑫 发表于 2014-1-14 23:10
equals其实底层也是调用==号 用于操作基本数据类型 其实用==号就行了 equlas方法只是用于比较对象的内容的 ...

我就是不明白为神魔程序中有时用==有时用equals,真心的分不清该用哪个,用的时候有时就测试一下这个不行就用那个,但始终还是不大明白,还望详细给说说怎莫用
回复 使用道具 举报
一般你学到集合 在定义一个类的时候通常都是需要覆盖equals toString hashcoe等方法 建立自己的比较方法
回复 使用道具 举报
  ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
    ==比较的是2个对象的地址,而equals比较的是2个对象的内容。
    显然,当equals为true时,==不一定为true;
(值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中)
回复 使用道具 举报
==比较的是对象的引用,即其在堆内存中的地址值;而equals默认比较的是对象的值,即其内容。例如:
          String x="mrwise";
          String y="mrwise";
          String z=new String("mrwise");
其中x==y,但是x.equals(z)等于True,然而,x==z是假的

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
黄晓鑫 + 1 + 3 很给力!

查看全部评分

回复 使用道具 举报
看完这个你要是还不懂,我可以去跳墙了。。http://bbs.itheima.com/forum.php ... ;pre_pos=6&ext=

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
==和equals的区别,==比较的是值,所谓的值一般是指变量值或地址值,如果变量是普通变量,比如int a=4;那么我们就是变量a的值是4,对于这个语句我想一般都是栈内存开辟的普通变量所表示的具体值是什么。如果变量是引用变量,比如String s=new String("abc")那么这里的值是指s所引用的在堆内存中的对象的地址值,内容也就是这个对象的内容abc,equals比较的是内容。我举一些例子:
String s="a";String s1="a";这里我们不管是用==还是equals都是true,为什么呢?原因就是s是直接引用常量池中的一个字符串对象的,并没有指向new一个对象,在常量池中的对象,如果发现有相同的内容是不会再创建的,也就是说s和s1指向的是常量池中的同一个对象,地址值是相同的,内容也是相同的因此不管是==还是equals都是true。

评分

参与人数 1技术分 +1 收起 理由
黄晓鑫 + 1

查看全部评分

回复 使用道具 举报
  1. public class Different {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void out(Object obj){
  6.                 System.out.println(obj);
  7.         }
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub
  10.                 int m=1,n=1;
  11.                 boolean boo=(m==n);
  12.                 String s1=new String("nihao");
  13.                 String s2=new String("nihao");
  14.                 out(boo);
  15.                 out(s1.equals(s2));
  16.         }

  17. }
复制代码

其中m和n都是引用,说白了就是地址,==比较的是地址值,下面定义了两个String字符串,但是用equals返回的也是true,说明比较的是内容。
一个判断地址是否相同,一个判断内容是否相同,这样应该明白了吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马