l 操作符“==”用来比较两个操作元是否相等,这两个操作元既可以是基本类型,也可以是引用类型
l 在java.lang.Object类中定义了equals()方法,用来比较两个对象是否相等“==”两边都是引用类型的变量时候,这两个引用变量必须都引用同一个对象,结果才为true;“==”两边的变量被显式声明的类型必须是同种类型或有继承关系,即位于继承树的同一个继承分支上。
Dog dog=new Dog();
Creature creature=dog;
Animal animal=new cat();
System.out.println(dog==animal);//合法,false
System.out.println(dog==creature);//合法,true
Dog dog=new Dog();
Cat cat=new Cat();
System.out.println(dog==cat);//编译出错
JDk中有些类覆盖了Object类中的equals()方法,他们的比较规则为:如果两个对象的类型一致,并且内容一致,则返回true。
Integer int1=new Integer(1);
Integer int2=new Integer(1);
System.out.ptint(int1==int2);//false
System.out.ptint(int1.equals(int2));//true
今日仔细对比了equals方法和==在判断两个对象关系时原理及其相关的内存细节,整理了一下重写equals()方法的步骤:
l 首先应该测试两个引用是否指向同一个对象,如果是则直接返回true。这一步不是必须的,但可以提高比较时的性能,因为如果两个引用指向同一个对象,其equals测试肯定返回true,不再去比较任何内容
l 接下来应该测试传递进来的对象引用是否为null,如果是则直接返回false
l 然后测试传递进来的对象引用是否通过自己类型的instanceof测试,如果不通过则返回false,因为传递进来的对象一定是object型,也就是说指向的对象有可能是其他类型的,若是其他类型则没可比性的
l 将传进来的引用强制类型转换为自己的类型,测试相关的成员是否相等,成立则返回true,否则返回false
注意:重写equals方法时访问限制必须为public,因为object类中的该方法已经是public类型,重写方法的访问限制只能与原来相同或比原来宽;方法入口参数必须为object类型,不可以是其他的类型。
Class Student{
String name;
Int age;
Public Student(){}
Public Student(String name,int age){
This.name=name;
This.age=age;
}
Public Boolean equals(object o){
If(this==o){return true;}
If(o==null){return false;}
If(!(o instanceof Student)){return false;}
Student s=(Student)o;
If(this.name.equals(s.name)&&this.age==s.age)
{return true;}
Else {return false;}}}
//重写haseCode()
……….
分享到:
相关推荐
默认情况下,所有对象都有一个`equals()`方法,它源自`Object`类,这个方法同样比较的是对象引用,但`String`类重写了这个方法,使得它比较的是字符串的内容,即两个字符串中字符序列是否相同。因此,当使用`equals...
当比较两个对象时,如果它们是引用类型,并且没有重写Equals方法,那么默认情况下使用的是引用比较,即使用==运算符的方式。但许多类型会重写Equals方法以实现更深层次的内容比较,比如String类型就重写了Equals以...
小结 在 Java 中,== 操作符比较的是变量的值或地址值,而 equals() 方法比较的是对象的内容。对于基本类型的变量,== 操作符比较的是值是否相同;对于引用类型的变量,== 操作符比较的是地址值是否相同。equals() ...
5. `equals()`方法可以被子类重写以实现自定义的相等性检查,例如String类就重写了`equals()`方法,使其比较字符串内容而不是内存地址。 理解`equals()`方法和`==`运算符的区别对于编写高质量的Java代码至关重要。...
对于自定义的类(例如Cat),如果没有重写equals方法,则它默认的行为是与==相同,即比较的是对象的引用。 ```java class Cat { private String name; // 其他成员变量、方法和构造器 public boolean equals...
### 集合小结 Collection #### Java集合概述 Java中的集合是一组对象的组合,类似于C++标准模板库中的容器。但是与C++不同的是,Java集合不仅可以存储单一类型的数据,还可以存储不同类型的对象。这使得Java集合...
### 小结 `Object`类提供了许多基本而强大的功能,包括`toString()`、`equals()`、`hashCode()`、`getClass()`以及`clone()`等方法。通过理解和适当重写这些方法,开发者可以更好地控制对象的行为,并提高代码的...
14.2 重写equals与hashCode方法 273 14.2.1 重写equals方法 273 14.2.2 重写hashCode方法 275 14.3 集合框架的层次结构 -277 14.4 Ordered与Sorted的接口 278 14.4.1 Ordered的排序 278 14.4.2 Sorted的...
小结 [第9节] 1.2.1为什么需要封装1 [第10节] 1.2.1为什么需要封装2 [第11节] 1.2.2如何实现封装2 [第12节] 1.2.3如何使用包1 [第13节] 1.2.3如何使用包2 [第14节] 1.2.4类成员的访问控制1 [第15节] 1.2.4类成员的...
162 8.5.8 重写equals方法 163 8.6 final与继承的关系 164 8.7 abstract与继承的关系 165 8.8 什么是多态 166 8.9 什么是枚举类 168 8.10 什么是反射机制 169 8.11 什么是泛型 170 8.12 综合练习 172 8.13 小结 172 ...
#### 小结 - **继承与多态是Java面向对象编程的核心概念**。正确理解并运用这些概念可以帮助开发者写出更高质量、更易于维护的代码。 - **注意**:虽然继承和多态非常有用,但在实际项目中应当适度使用,过度依赖...
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
#### 小结 以上讨论的Java经典问题涵盖了字符串处理、对象引用比较、不可变性原则以及基本数据类型的默认值等内容。理解这些概念对于编写高质量的Java程序至关重要。此外,正确使用 `final` 关键字能够帮助开发者更...
_注意_:当数据元素是实体类时,需要额外重写_equals_()和_hashCode_()方法,以便正确地比较对象的相等性。例如,以学号为依据判断重复: ```java public class Student { String id; String name; int age; ...
- 重写发生在子类与父类之间,子类覆盖父类的同名方法,要求返回类型相同,参数列表完全一致,且访问权限不能更低,异常处理不能更广泛。 8. **不能根据返回类型区分重载**:返回类型不能作为重载的唯一依据,因为...
7. **本章小结**:综合以上内容,本章介绍了如何通过继承、组合和使用包来有效重用和组织类,提高代码的结构和可读性。同时,讲解了抽象类和终结类在控制类继承和方法重写上的作用,以及如何正确利用Object类提供的...
### 小结 掌握上述Java基础知识对于准备面试非常重要。修饰符、字符串处理、HTTP方法选择以及抽象类与接口的概念是Java程序员需要熟悉的核心概念。希望本文能够帮助你在Java学习之旅中取得进步!
#### 小结 本文介绍了正则表达式的基础语法及其在 Java 字符串中的应用,并详细讨论了 `String` 和 `StringBuilder` 类的特性和方法。同时,还解释了 `Object` 类的重要性以及自动装箱和拆箱的概念。这些知识点对于...
#### 小结 本实验旨在帮助学生掌握Java开发环境的搭建与使用,理解Java语言的基础知识和String类的使用技巧。通过实践操作,学生不仅能够熟悉Java的开发流程,还能加深对面向对象编程的理解。这对于进一步学习更复杂...