Object类
Object类是类层结构的根类,每个类都使用Object作为超类.所有对象(数组)都实现这个类的方法
equals():
boolean equals(Object obj)
指示某个对象是否与此对象相等
源码: object 可以传递任意对象
public boolean equals(Object obj){
==: 比较运算符返回的就是一个布尔值
基本数据类型:比较的是值
引用数据类型:比较的是两个对象的地址值
this是谁?那个对象调用this,this就代表那个对象
return (this == obj);
}
toString():返回对象的字符串表示,默认调用toString无意义,需要给toString里面的返回值赋值.
看一个类是否重写了toString方法,直接打印这个类的对象名即可
如果没有重写,折磨人打印的为地址值,如果重写那么按照重写方式大打印
在jdk7的时候添加了Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成
这些方法是容忍空指针的
总结:
Object类:
Object类是所有类的父类,一个类都会直接或者间接继承自该类
该类中提供啦一些常用的方法.
直接通过输出语句,默认调用的就是该对象的toString()方法
toString()方法:
作用:
打印对象信息
重写前:打印的是包名加类名@地址值
重写后:打印的是对象中的属性值
equals()方法:
用来比较两个对象,
重写前:比较的是对象的地址值
重写后:比佳品对象中的属性值.
Objects类:
是一个对象的工具类
=============================
//默认继承
public class Person /*extends Object*/{
/*
* Person类默认继承自Object类:
* 所以可以使用Object中的toString()方法
* 所以也可以用 equals()
*/
/*
* 对象的属性值一样返回true,否者返回false
* 隐含一个多态
* Object obj = p2 = new Person("古力娜扎",18);
* 多态的弊端:无法使用子类特有的属性和内容.
* 解决办法:向下转型(强转)
* 把Object类型转换为Person
* 下面是重写的原理:
* 我们重写equals方法让她比较两个对象的属性值,而不是地址值啦;
*/
// @Override
// public boolean equals(Object obj) {
// //增加一个判断,传递进来的参数是本身,直接返回true
// if(obj == this){
// return true;
// }
// //增加一个判断,如果传递进来的参数obj为null,直接返回false,提高程序的效率
// if(obj == null){
// return false;
// }
// /* 防止类型转换异常,增加一个判断ClassCastExceptionm
// *
// */
// if(obj instanceof Person){
//
// //把Object类型转换为Person
// Person p = (Person) obj;
// //比较两个对象的属性,一个是调用方法的this(p1) ,一个是(obj=p2)
// boolean b = this.name.equals(p.name) && this.age==p.age;
// return b;
// }
// //不是person类型直接返回false ,输出语句不能再return之后,因为那时方法已经结束掉了
// System.out.println("不能进行比较的对象");
// return false;
//
// }
//
private String name;
private int age;
//快捷键生成equals类似get / set 找到hashcode and equals
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
//使用反射技术判断是否为person类型 等效于 obj instanceof Person
if (getClass() != obj.getClass())
return false;
//强转之后比较.
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/*
* 直接打印对象的地址值没有意义,需要重写对象中的toString方法
* 打印对象的属性.
* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
// TODO Auto-generated method stub
// 返回啥写啥
// return "abc";
return "[姓名 : "+this.name+"年龄 : "+this.age+"]";
}
}
-----------------------------------------------------
public class ObjectCls {
public static void main(String[] args) {
Person p = new Person();
p.setName("唐梦凡");
//调用toString()方法,有返回值,需要接收一下
String s = p.toString();
System.out.println(s);
Person p2 = new Person("周杰伦",32);
System.out.println(p2);
Random r = new Random();
System.out.println(r);//没有重写toString方法,打印地址值
Scanner sc = new Scanner(System.in);
System.out.println(sc);//重写啦toString,打印代码串
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
System.out.println(list); //重写了toString,打印[1,2]
Person son1 = new Person("迪丽热巴",18);
Person son2 = new Person("迪丽热巴",18);
boolean result = son1.equals(son2);
System.out.println(result);
//存在问题,类型转换异常
Random r2 = new Random();
// boolean b2 = son1.equals(null);
boolean b2 = son1.equals(r2);
boolean b3 = son1.equals(son1);
System.out.println(b2);
//正常定义变量的方式:
String str = "abc";
System.out.println(str);
//比较String对象
String nn = "bbb";
String yy = "bbb";
String zz = null;
System.out.println(nn.equals(yy));
//借用对象的工具类Objects来避免安全问题(空指针异常),有返回值
boolean res = Objects.equals(nn, zz);
System.out.println(res);
//比较对象Person对象,地址值.
Person stu1 = new Person("张三",18);
Person stu2 = new Person("张三",18);
System.out.println(stu1.equals(stu2));
}
}
--------------------------------------------------
import java.util.Objects;
/*
* 在jdk7的时候添加了Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成
* 这些方法是容忍空指针的
*
*
*/
public class ObjectsNull {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "aaa";
String s3 = null;
boolean b = s1.equals(s2);
System.out.println(b);
//java.lang.NullPointerException
//s1放前面没事,内容比较空位false,而空比较会爆空指针异常
// boolean c = s3.equals(s1);
// System.out.println(c);
//使用Objects中的方法
/* 这个方法的源码:
* public static boolean equals(Object a,Object b){
* 所以容忍空指针的.
* return (a==b) || (a!=null && a.equals(b))
* }
*
*/
boolean d = Objects.equals(s1, s3);
System.out.println(d);
}
}