例子i:

string1="aaa";

string2="aaa";

String string3=new String("aaa");

String string4=new String("aaa");

string1==string2 // true; .

string1.equals(string2);//true;

string3==string4;//false 因为用new创建了2个对象,所以是两个不同的内存地址

string3.equals(string4);//true 而String类的是不可改变的,所以会指向同一个内存地址,所以返回为true

equals()是object的方法,所以只是适合对象,不适合于基本类型,equals()默认是用"=="比较两个对象的内存地址,如果想要比较两个对象的内容,要重写equals()方法才可...而==可以比较两个基本类型,也可以是对象...

String的equals()方法重写:

public boolean equals(Object object){

if( this==anObject)

{return true;}

if(anObject instancdOf 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;

}

总而言之:在类对象中 equals()方法比较的是对象的值,==比较的是对象.即为对象的引用(即为内存地址)一些特殊情况下equals()是重写了方法咯..

equal:是用来比较两个对象内部的内容是否相等的,由于所有的类都是继承

自java.lang.Object类的,所以如果没有对该方法进行覆盖的话,调用

的仍然是Object类中的方法,而Object中的equal方法返回的却是==

的判断,因此,如果在没有进行该方法的覆盖后,调用该方法是没有

任何意义的。

==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的

是真正意义上的指针操作。

1、声明格式

public boolean equals(Object obj)

其比较规则为:当参数obj引用的对象与当前对象为同一个对象时,就返回true,否则返回false.

比如以下两个对象animal1和animal2,引用不同的对象,因此用==或equals()方法比较的结果为false;而animal1和animal3变量引用同一个DOg对象,因此用= =或者equals()方法比较的结果为true.

Animal animal1=new Dog();

Animal animal2=new Cat();

Animal animal3=animal1;

则animal1==animal2 (FALSE)

animal1.equals(animal2) (false)

animal1==animal3 (true)

animal1.equals(animal3) (true)

而JDK类中有一些类覆盖了oject类的equals()方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,这些类有:

java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)

比如

Integer int1=new Integer(1);

Integer int2=new Integer(1);

String str1=new String("hello");

String str2=new String("hello");

int1==int2 输出:false,因为不同对象

int1.equals(int2) 输出:TRUE

str1==str2 (false)

str1.equals(str2) (true)

当然,可以自定义覆盖object类的equals()方法,重新定义比较规则。比如,下面Person类的equals()比较规则为:只要两个对象都是Person类,并且他们的属性name都相同,则比较结果为true,否则返回false

public class Person{

private String name;

public Person(String name)

{

this.name=name;

}

public boolean equals(Object o)

{

if (this==0) return true;

if (!o instanceof Person) return false;

final Person other=(Person)o;

if (this.name().equals(other.name()))

return true;

else

return false;

}

}

注意,在重写equals方法时,要注意满足离散数学上的特性

1、自反性 :对任意引用值X,x.equals(x)的返回值一定为true.

2 对称性: 对于任何引用值x,y,当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;

3 传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true

4 一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变

5 非空性:任何非空的引用值X,x.equals(null)的返回值一定为false

转载于:https://www.cnblogs.com/air5/archive/2011/11/22/2258972.html

Java中关于==和equal的区别 以及equals()方法重写相关推荐

  1. java关于Integer和int的区别以及equals()方法

    Integer和int的比较详解 https://blog.csdn.net/andyzhaojianhui/article/details/84324466 equals()方法用于判断参数的类型和 ...

  2. java中next()和nextline()用法区别(详细说明)

    java中next和nextline用法区别 一,方法说明 二,空格的情况(tab键相当于多个空个 1.测试代码 2.中间出现空格时 3.开头出现空格时 三,回车键的情况 分析:回车键的情况 四,常见 ...

  3. java中的异常种类和区别以及处理机制和区别

    java中的异常种类和区别以及处理机制和区别 按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeExce ...

  4. java中ArrayList和LinkedList的区别

    首先来看ArrayList和LinkedList的集成类和接口的区别.// lang java public class ArrayList<E> extends AbstractList ...

  5. java中Runnable和Callable的区别

    文章目录 运行机制 返回值的不同 Exception处理 java中Runnable和Callable的区别 在java的多线程开发中Runnable一直以来都是多线程的核心,而Callable是ja ...

  6. java中wait和sleep的区别

    文章目录 Wait和sleep的区别 唤醒wait和sleep java中wait和sleep的区别 在本篇文章中,我们将会讨论一下java中wait()和sleep()方法的区别.并讨论一下怎么使用 ...

  7. java throw与throws_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

  8. Java中重载和复写的区别

    Java中重载和复写的区别 重载(overload) 复写(override) 区别和联系 重载(overload) 函数重载的最突出的例子就是类的构造函数,用户定义一个对象时可能会提供多种参数组合: ...

  9. java is instance of_详谈Java中instanceof和isInstance的区别

    一次性搞定instanceof和isInstance,instanceof和isInstance长的非常像,用法也很类似,先看看这两个的用法: obj.instanceof(class) 也就是说这个 ...

最新文章

  1. python笔记: 生成器
  2. 【高性能定时器】 时间轮
  3. eclipse自动补全设置
  4. java毫秒 mysql秒_MySQL和Java时间毫秒之间的转换问题的总结
  5. eclipse 上svn插件的安装,百度知道
  6. 用Python处理Excel文件
  7. js阻止鼠标右击_使用JS 禁止键盘快捷方式和禁止鼠标右键操作弹窗提示
  8. 函数r语言_[R learning]-0006-R语言的基本函数
  9. 正式环境docker部署hyperf_忍受不了 docker 环境下 hyperf 启动等待时间,教你如何通过 win10 子系统快速运行 hyperf...
  10. linux flash 存储寿命,关于 Flash 存储,你应该知道的一些事情
  11. oracle数据文件recover,又遇BUG-ORA-01148:数据文件忽然变为recover状态
  12. 淘客联盟系统维护光盘2008新春大礼包
  13. vue动态添加图片/背景图
  14. 用JAVA制作ICQ
  15. 谷歌浏览器弹出窗口html代码,谷歌浏览器显示通知消息JS代码
  16. FPGA数码管显示自动计数+按键计数+蜂鸣器
  17. COB,COF,COG区别
  18. 【秋钓皮皮】 奔跑吧,皮皮!(有图了)
  19. Tekton笔记(四)之Authentication及catalog skopeo
  20. ARM汇编伪指令介绍

热门文章

  1. Apache 下更改 DocumentRoot 和新建虚拟目录
  2. IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下载
  3. 第二次作业(个人项目实践)
  4. js调试工具console详解
  5. 6大设计原则之依赖倒置原则
  6. 快速学习使用 Windows Azure 上的 SharePoint Server 2013
  7. NHibernate VS .NET Type VS DbType 的类型映射关系
  8. Mysql优化之基础回顾篇
  9. hdu 5037 周期优化
  10. 视频与图像RGB/YUV格式详解