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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张源锋 中级黑马   /  2013-4-2 18:03  /  2108 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1.         @Test
  2.         public void test5(){
  3.                 String str = new String("abc");
  4.                 String str1 ="abc";
  5.                 boolean b1 = str==str1;
  6.                 boolean b2 = str.equals(str1);
  7.                 System.out.println(b1+" | "+b2);
  8.         }
复制代码
结果
  1. false | true
复制代码
求==与equals的区别

点评

这个问题论坛出现了好多次  发表于 2013-4-2 21:31

13 个回复

倒序浏览
通常情况下!==比较的是地址!equals比较的是内容!但是object类里面的equals方法比较的还是地址,自定义的类,如果要比较其内容就要重写equals方法!上述题目当中,你new的对象和那个直接赋值在不同地址中,所以==是false,equals是true!
回复 使用道具 举报
本帖最后由 抽烟男孩 于 2013-4-2 18:21 编辑

针对以上代码,如果是==需要两个String对象的引用(表示的内存地址块相同),而equal仅仅需要其内容即字符串相同。
因为如果是==的话它还包括对象的序列号和一些object属性。
回复 使用道具 举报
== 是用来比较在内存地址的  而equals  则是比较实际的内容
比如你的代码中:
String str = new String("abc");  -- 通过new实例化出的对象, 他会存放在内存中开辟的空间
                String str1 ="abc";  --  通过赋值在堆内存中开辟出的空间

他们的内存地址是不同的,  所以当使用  == 来进行判断的时候, 会false

而equals  是用来比较放在内存中的值的, 因为他们都是abc , 所以返回值是true
回复 使用道具 举报
equals比较的是内容,因为都是"abc"所以是true,==比较的是地址值,new这个关键字表示在内存里面开辟一个新的内存空间,他的地址值和原来的是不一样的,所以是false
一般情况下,我们会去自己重写equals方法来满足我们个人的要求
回复 使用道具 举报
Equals方法比较的是内容是否相等

==用来比较两个对象是否相等。它比较的是地址是否相同。
回复 使用道具 举报
以上代码中,==比较的是内存地址,两个str的内存地址显然不同。而代码中equals是String方法中的equals,不是Object的,所以可以直接比较内容,即字符串的内容是不是相等,所以返回值一个是false,一个是true。
回复 使用道具 举报
==用来比较对象的引用是否相等,此例中str==str2比较的是str 与str2 的内存地址 str与str2的内存地址值不同所以返回false
equals方法是Object类提供的一个实例方法,String对象的equals 方法重写了Object的equals()方法,可以用来判断两个字符串的值是否相等,此例中显然str与str2的值都是"abc" 所以str.equals(str1)返回true



回复 使用道具 举报
如果是基本类型的话,可以用==判断,判断的是值。
引用类型的如果用==判断,判断的是地址值,new出来的两个对象,虽然对象本身相同,但是地址值肯定是不同的,所以是false。
用equals判断的是对象本身的内容,这就是true。
回复 使用道具 举报
对于实例对象而言,==比较的依然是内存地址(所以你可以看出无论什么情况,==一直比较的都是内存地址),而equals()默认重写Object类的equals()方法(比较地址)。但是一般我们会自己重写equals(),让它比较值是否相等
针对你的问题:首先str==str1;比较的是内存地址很显然他们的内存地址是不同的"str"是new出来的对象,"str1"是一个字符串。
str.equals(str1);
回复 使用道具 举报

针对你的问题:首先str==str1;比较的是内存地址很显然他们的内存地址是不同的"str"是new出来的对象,"str1"是一个字符串。
str.equals(str1);它们比的是内容,很显然他们都是"abc".在这段代码中==比较的是内存地址,equals比较的是内容。
回复 使用道具 举报
"=="是比较内存的地址;一般equals是比较两对象的实际内容是否相同!。但是equals的默认行为是比较引用一般用到时会自己重写覆盖!
回复 使用道具 举报
简单理解就是==要求比equasl高,后者只要求值相等,前者要求是同一个对象即值和位置都相同。
回复 使用道具 举报
==比较是否相同(地址相同),equals比较是否相等
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马