怎样理解equals()方法.
为什么有时是相等有时不相等
为什么有时是相等有时不相等
解决方案 »
- 重写toString()想要通过 return 打印出数组???
- JAVA调用SQLSERVER2005存储过程,报错:该语句没有返回结果集 在线等!!!
- 请问用什么工具能由源码生成程序的静态类图?
- 《java核心技术 卷1:基础知识》第六版的例子源码谁有吗??(即《Core java2 Volume1 Fundamentals》)
- 对高手来说是个很基础的问题,可是对低手来说却难以奢望???
- 还是JDBC中的 添加问题
- 有谁知道:在JBUILDER7里如何调用ORALCE中的过程???
- 谁给我这个新人看看这个问题?
- 我是菜鸟,请您帮忙!我第一次运行java程序的helloworld,遇到问题
- mybaits中可以使用merge语法吗?
- ssh整合struts 单元测试报错 初学大家帮帮忙
- 判断相同或相等 == .equals =
2,== 和!=是reference(引用)的比较(同一个实例)
3,java标准库里的class大都override(覆写)了equals,所以这些class都做reference(引用)的比较
比如:
String str1="a";
String str2="a";if(str1.equal(str2)){//结果是true
}if(str1==str2){//结果是false,因为两个内存地址不同
}
对于对象,== 直接比较对象在的应用,而equals是调用对象的这个方法,至于如果比较,是看这个方法内容的,不是简单比较。你可以把这个equals写的很复杂比如这个对象所有属性值的比较。
2,== 和!=是reference(引用)的比较(同一个实例)
3,java标准库里的class大都override(覆写)了equals,所以这些class都做reference(引用)的比较建议好好思考这3句话
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.class Value {
int i;
}public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} ///:~
==在基本数据类型比较的时候是比较的值,在比较对象的时候是比较的引用地址。
equals方法是Object类里面的一个方法,它的意义是比较两个对象的内容,但是这只是它的意义而已,在Object方法内部的equals方法还是使用的“==”来比较的,如果你看过jdk的源代码的话你就会知道,所以要实现对象的比较必须覆盖掉Object的方法。
但是对于很多对象,其实已经覆盖掉了里面的方法,比如Integer类。
正因为有些类已经override了equals方法实现了实例的比较,而有些类则需要我们自己实现,所以就导致equals在比较对象的时候,有时和==效果一样(这就说明这个类没有覆盖原来的equals方法),而有时又比较的是对象的内容(这说明这个类已经覆盖了原来Object类的equals方法,实现了equals比较对象内容的真正意义)。