首页 技术 正文
技术 2022年11月15日
0 收藏 893 点赞 4,891 浏览 2465 个字

Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类

 public class Student {
//姓名、学号、年纪
private String name;
private int sid;
private int age; //定义构造方法,给对象初始化
public Student(){ }
public Student(String name,int sid,int age){
this.name=name;
this.sid=sid;
this.age=age;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

测试类:

 package com.cn.reequlas;
//equals是比较2个对象是否相等,因为stu1和stu2是2个对像,在内在中是存了2个地址,所以不相同,找的是内存地址、
public class TestStudent {
public static void main(String[] args) {
Student stu1=new Student("张三",1,1);
Student stu2=new Student("张三",1,1);
boolean flag=stu1.equals(stu2);
System.out.println(flag);
} }

因为对于Object类中的equals方法来讲,它是用来对比,2个对像的在内存中的地址是否相同,很显然,stu1 new了一个新地址,stu2也new了一个新地址,当然不同

而实际应用中,2个学生都叫张三,学号都一样,因为学号是唯一的,所以他俩就是同一个人来着。那么我们就得重写equals方法,当name和学号一样的时候,就是相同的一个对像咯

这里有一个知识点:instanceof

//instanceof是指obj对像属于Student
if(!(obj instanceof Student))

添加重写后的equals方法如下:

 package com.cn.reequlas; public class Student {
//姓名、学号、年纪
private String name;
private int sid;
private int age; //定义构造方法,给对象初始化
public Student(){ }
public Student(String name,int sid,int age){
this.name=name;
this.sid=sid;
this.age=age;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写equlas方法,判断姓名、学号相等,就是同一个学生
//obj是给我们的一个学生对像
//this是我们自己的学生对像equals public boolean equals(Object obj){
boolean flag=false;
//判断对像是否相同,基本是不可能的
if(obj==this){
flag=true;
}
//
if(!(obj instanceof Student)){
flag=false;
}else{
Student stu=(Student)obj;
if(stu.name.equals(this.name) && stu.sid==this.sid){
flag=true;
}
}
System.out.println(flag);
return flag;
}
}

测试类不变,输出结果就是true

package com.cn.reequlas;
//equals是比较2个对象是否相等,因为stu1和stu2是2个对像,在内在中是存了2个地址,所以不相同,找的是内存地址、
public class TestStudent {
public static void main(String[] args) {
Student stu1=new Student("张三",1,1);
Student stu2=new Student("张三",1,1);
/*Pet pet=new Pet("张三",1,1);*/
//使用重写后的equlas方法,第1个if里面,判断对像是否相同,这个(stu1)就是是obj,stu1是this
/*boolean flag1=stu1.equals(stu1);
System.out.println(flag1);
*/
//验证Student类中重写object方法的第2个if,不是同等类型
/*boolean flag2=stu1.equals(pet);
System.out.println(flag2);*/
//验证Student类中重写object方法的第2个if中的else
/*boolean flag4=stu1.getName().equals(stu2.getName());
System.out.println(flag4); boolean flag5=stu1.getSid()==(stu2.getSid());
System.out.println(flag5);*/ boolean flag=stu1.equals(stu2);
System.out.println(flag);
}}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,565
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905