object当中的equals类:
对于祖宗类型当中的equals,是进行类与类之间的比较的
但是对于默认的equals是比较简单的, 默认的情况下, 比较的是两个类当中的默认地址值
但是我们的需求是需要比较两个对象当中的内容是不是一样的
因此, 我们需要对其进行重写objects当中的equals类
从而来实现对于不同对象之间内容的比较
*****向下转换, 重点*****
public boolean equals(Object obj) {
在这里, 我们需要注意的一点, 在进行重写的时候, obj是传入父类当中的一个东西, 子类当中有的父类是没有的, 所以我们需要使用强制向下转换, 从而保证这个对象能够使用子类当中特有的成员方法
student stu2=(student)obj; return this.age==stu2.age && this.name.equals(stu2.name);
public static void main(String[] args) { student stu1 =new student("swn",19); student stu2=new student("swn",19); System.out.println(stu1.equals(stu2)); //默认的equals是比较地址值 //更改之后比较内容, 答案是true
在这里, 如果使用了集合类型, 也就是说不再是student类的对象了, 那么就是无法比较的
所以需要保证的是每一个比较的对象都是相同类的
if(obj instanceof student) { student stu2 = (student) obj; return this.age == stu2.age && this.name.equals(stu2.name); } else{ return false; } }
/*tips:instanceof是java当中的一个保留关键字, 相当于是双符号标识符
作用:它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
object类当中的的toString类型
/*api:
简单的说就是在java当中已经写过的方法,类,能够进行直接的调用
object类:能够直接或者间接的作为所有类的父类,是任何类的祖宗级别的类型
toString返回该对象的字符串表示
--------------------------------------
注意细节
在使用相应的打印语句直接打印相应的对象的时候, 在println当中, 在源码层面, 会自动的调用toString方法进行实现的
所以说在打印的时候, 无论是直接打印对象名, 还是使用toString方法进行打印, 结果都会是一样的
在java当中, 通常会对于toString方法进行一次重写, 因为原本通过对象名称进行直接打印出来的"准地址值"
是没有任何的作用的
作用:
在对其重写之后就可以在其中通过打印对象名而直接对于相应的类当中的
成员变量 进行字符串的连接而直接打印出来
优点:
可以通过直接打印对象名称从而了解成员变量的详细值
*/
@Override public String toString() { return "A{" + "name='" + name + '\'' + ", age=" + age + '}'; }
public static void main(String[] args) { A a=new A("王森",18);
//可以看出来, 在对toString方法进行重写了之后, 通过调用对象名能够直接显示出其中的详细情况
1.在这里直接对于对象名称进行打印, 最后出来的结果是一个准"地址值"
2.无论是调用toString方法还是直接调用对象名称, 结果都是一样的, 也就是在打印对象名的时候, 系统会
3.默认的对其进行使用相应的toString方法