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

© 王舒玮 中级黑马   /  2012-11-26 21:13  /  2172 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

equals与==的区别?

10 个回复

倒序浏览
equals方法判断对象的内容是否相等,比较的两个字符串是否一样,"==" 比较的是值,是两个“引用”。
回复 使用道具 举报
“==”是比较两个基本类型变量的值是否相等,或者比较两个对象引用指向的对象是否是同一个对象;
“equals”是比较两个对象引用指向的对象值是否相等,基本类型没有“equals”方法。
回复 使用道具 举报
==是判断两个变量或实例是不是指向同一个内存空间

equals是判断两个变量或实例所指向的内存空间的值是不是相同

eqauls 与 = =之异同

1)比较方式角度:

= =是面向过程的操作符;equals是面向对象的操作符

= =不属于任何类,equals则是任何类的一个方法;

我们可以 1)Primitive1 (基本类型)= = Primitive2(基本类型);

          2)Object Reference1(对象引用)= = Object Reference2(对象引用)

          3)Object Reference1 (对象引用) .equals(Object Reference2 (对象引用))

            这三种比较

            但却不能Primitive1 (基本类型).equals( Primitive2(基本类型));


方法成员。



2)比较目的角度:

1)     如果要比较两个基本类型是否相等,请用= =;

2)     如果要比较两个对象引用是否相等,请用= =;

3)     如果要比较两个对象(逻辑上)是否一致,请用equals;

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
用一段代码说明下
public class TestEquals_1
{
public static void main(String[] args)
{
  String s1 = "abc";
  String s2 = new String("abc");
  System.out.println(s1 == s2);//输出结果是fasle
  System.out.println(s2.equals(s1));//输出结果是true
  }
}
先说下==,这是一个比较运算符,返回值是布尔型,比较的是比较对象本身.
1 == 2,表达式为假返回false.上述代码中 s1 == s2,比较的是s1,s2本身.s1,s2本身
是引用(也就是地址了)代表的是两个不同地址,肯定不相等.
再来看看equals方法,它是Object类中方法,其作用也等价于==.
但是,s2是一个String引用,调用的是String类中的equals方法,通过API查阅可知,该方法被重写了
比较的是s1,s2指向的内容:"abc".所以输出的是true.

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
多看API,多看毕爷视频.我学java10天了.
回复 使用道具 举报
==是同一个箱子(同一对象)
equals是两个箱子里面的东西(对象内容是否一样)
回复 使用道具 举报
== 比较对象的引用是否相同,引用就是对象地址 equals是对象的方法,基本上实现来比较对象自己的内容,字符串对象就是字符串值,你自己的对象就是你自己定义的规则
回复 使用道具 举报
值类型
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

对象比较
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true;

一、String中的equals和==
1、
public class TestString {
     public static void main(String[] args) {
         String s1 = "Monday";
         String s2 = "Monday";
     }
}
上面这段程序中,到底有几个对象呢?
来检测一下吧,稍微改动一下程序
public class TestString {
     public static void main(String[] args) {
         String s1 = "Monday";
         String s2 = "Monday";
         if (s1 == s2)
             System.out.println("s1 == s2");
         else
             System.out.println("s1 != s2");
     }
}

编译并运行程序,输出:s1 == s2
说明:s1 与 s2 引用同一个 String 对象 -- "Monday"!

2.
再稍微改动一下程序,会有更奇怪的发现:
public class TestString {
     public static void main(String[] args) {
         String s1 = "Monday";
         String s2 = new String("Monday");
         if (s1 == s2)
             System.out.println("s1 == s2");
         else
             System.out.println("s1 != s2");
         if (s1.equals(s2))
             System.out.println("s1 equals s2");
         else
             System.out.println("s1 not equals s2");
     }
}
我们将 s2 用 new 操作符创建
程序输出:
s1 != s2
s1 equals s2
说明:s1 s2分别引用了两个"Monday"String对象

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马