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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王艳静 中级黑马   /  2015-8-19 20:58  /  1229 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

“==”比较的是值【变量(栈)内存中存放的对象的(堆)内存地址】
equal用于比较两个对象的值是否相同【不是比地址】

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

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

对于基本类型的变量。"=="和"equal"的区别 :
“==”对于基本数据类型,判断两个变量的值是否相等。
“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。

7 个回复

倒序浏览
最后一个没看懂啊  是说不能用于常量?

“equal”不能用于基本数据类型。只能用于类变量。对于基本数据类型要用其包装类。
回复 使用道具 举报
原来是这么回事,感谢楼主
回复 使用道具 举报
今天正好学到这,听的迷迷糊糊的,感楼主分享
回复 使用道具 举报
sunsteam 发表于 2015-8-19 21:11
最后一个没看懂啊  是说不能用于常量?

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

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

哦 懂了
回复 使用道具 举报
顶一下!!!
回复 使用道具 举报
首先==号,他比较的是一个对象在内存中的地址值,
比如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;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马