黑马程序员技术交流社区

标题: equals和==的区别 [打印本页]

作者: 王艳静    时间: 2015-8-19 20:58
标题: equals和==的区别
“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
equal用于比较两个对象的值是否相同【不是比地址】

注:Object类中的equals方法和“==”是一样的,没有区别,而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。

"=="比"equal"运行速度快,因为"=="只是比较引用.

对于基本类型的变量。"=="和"equal"的区别 :
“==”对于基本数据类型,判断两个变量的值是否相等。
“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
作者: sunsteam    时间: 2015-8-19 21:11
最后一个没看懂啊  是说不能用于常量?

“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
作者: 何时指点江山    时间: 2015-8-19 21:41
原来是这么回事,感谢楼主
作者: zp转身就忘    时间: 2015-8-19 21:42
今天正好学到这,听的迷迷糊糊的,感楼主分享
作者: 王艳静    时间: 2015-8-21 20:37
sunsteam 发表于 2015-8-19 21:11
最后一个没看懂啊  是说不能用于常量?

“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型 ...

基本数据类型有8种:int float double char...... 这些类型定义的变量是存储在栈内存中的 所以用“==”进行比较。
而equals是在类中定义的方法 只能创建对象进行调用。所以对于基本数据类型要用其包装类。
作者: sunsteam    时间: 2015-8-21 23:08
王艳静 发表于 2015-8-21 20:37
基本数据类型有8种:int float double char...... 这些类型定义的变量是存储在栈内存中的 所以用“==”进 ...

哦 懂了
作者: qiaozengji668    时间: 2015-8-21 23:39
顶一下!!!
作者: 追梦天涯33    时间: 2015-8-22 00:19
首先==号,他比较的是一个对象在内存中的地址值,
比如2个字符串对象
String n1 = new String("str");
String n2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。
equals的情况比较复杂,它是java.lang.Object类中的一个方法。
因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。
在Object类源码中是这样写的。
public boolean equals(Object obj) { return (this == obj); } 他同样使用==号进行内存地址的比较。
但是许多java类中都重写了这个方法,比如String。
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;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2