Java基础部分
==和equals的区别是什么
首先浅谈一下==的用法:其用来判断两个变量是否相等,可以分为两种情况来看;
1.比较的两个变量是基本数据类型,只要数值相等,无需数值的类型也相同,则可认为两个变量相等,返回true。
2.比较的两个变量是引用类型,需要两个变量的地址相同,即指向同一个对象,则可认为两个变量相同,返回true。
注意:= =不可用于比较没有父子关系的两个对象,将发生编译错误。
再浅谈了= =的用法之后,可以分析一下equals的用法。在很多情况下,我们发现= =和equals并没有很明显的区别,这是什么原因导致的呢?
我们可以查看Object类中的equals方法
public boolean equals(Object obj)
{
return (this == obj);
}
从这可以看出在Object类中的equals方法也是用==实现的,这也导致了我们在大多数情况下觉得两者你并没有什么态度的区别。
注意:String类中的equals方法进行了重写,只要两个字符串所包含的字符序列相同,则返回true,否则返回false。
由此可以看出equals方法是灵活多变的,它可以在我们需要的时候,进行任意形式的重写,但需遵循以下几种原则:
1.自反性:对任意的x,x.equlas(x)一定返回true;
2.对称性:对任意的x和y,x.equlas(y)和y.equlas(x)的结果一定相同;
3.传递性:对任意的x、y、z,x.equlas(y)返回true,y.equlas(z)返回true,则x.equlas(z)也一定返回true;
4.一致性:对任意的x和y,只要x和y的比较信息不发生变化,不管此方法调用多少次,结果都不应发生变化;
5.对任何不是null的x,x.equals(null)一定返回false。
==和equals的区别大致上如上所示,文章部分内容摘自《疯狂Java讲义》