object类

java是面向对象的语言,核心思想:找适合的对象做适合的事情

方式一:自定义类,然后通过自定义的类创建对象

方式二:sun提供了很多的类给我们使用,我们只需要认识这些类,我们就可以通过这些类创建对象了

Object类是所有类的终极父类,任何一个类都继承了Object类

Object类:

Object类常用的方法:
-----toString(); 返回该对象的字符串表示,返回一个字符串用于描述该对象
-----equals(Object obj);用于比较两个对象的内存地址,判断两个对象是否为同一个对象
-----hashCode();返回该对象的哈希码(可以把哈希码就理解成是对象的内存地址)

java中的规范:一般我们重写了一个类的equals方法,我们都会重写他的HashCode方法

public class Demo1 {
	public static void main(String[] args) {
		Object o = new Object();
		System.out.println("toString:" + o.toString());// java.lang.Object@7b2164ea
														// 返回的字符串表示:完整类名+@+对象的哈希码
		System.out.println(o);
		//疑问:为什么直接输出一个对象的时候和输出toString方法返回的字符串结果是一样的
	}
}

疑问:为什么直接输出一个对象的时候和输出toString方法返回的字符串结果是一样的
个人理解,print也是一个方法,print(Object o)然后方法内部是o.toString()也就是print这个方法输出的就是toString方法的返回值,也就是说zaiprint方法里调用了toString方法

java提供的类都是开源的,查看源码的方式:
方式一:按住ctrl键,单机你需要看的源代码

方式二:把光标移动到你需要查看代码处,按下F3

为什么我们要查看源代码:
1.查看源代码可以了解别人是如何写出这个奇数的,让我们了解的更加深入
2.吸收大牛的思想

注意喽,看源代码最忌讳的一点就是,不要每行代码都弄懂是什么意思,能看个大概猜出他的意思就足矣了

toString作用:

重写toString之后,我们直接输出一个对象的时候,就会输出符合我们所需求的格式数据

class Person{
	int id;
	String name;
	public Person(){
		
	}
	public Person(int id,String name){
		this.id = id;
		this.name = name;
	}
	//目前我需要直接输出一个对象的时候,输出的格式是:编号:110 姓名:狗娃  这种格式。
	//目前toString方法无法满足子类的需求,那么这时候我们就应该对Object类的toString进行重写
	//快捷键toString+alt+/就会调出toString的方法,然后改写
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "编号:"+this.id+"\t姓名:"+this.name;
	}
}

public class Demo4 {
	public static void main(String[] args) {
		Person p = new Person(110,"狗娃");
		System.out.println(p);
	}
}

equals的重写:

class Person{
	int id;
	String name;
	public Person(){
		
	}
	public Person(int id,String name){
		this.id = id;
		this.name = name;
	}
	//目前我需要直接输出一个对象的时候,输出的格式是:编号:110 姓名:狗娃  这种格式。
	//目前toString方法无法满足子类的需求,那么这时候我们就应该对Object类的toString进行重写
	//快捷键toString+alt+/就会调出toString的方法,然后改写
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "编号:"+this.id+"\t姓名:"+this.name;
	}
	//重写equals,必须强制转换一下,不然obj和Person无法比较
	//object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		Person p = (Person)obj;
		return this.id == p.id;
	}
}

public class Demo4 {
	public static void main(String[] args) {
		/*
		Person p = new Person(110,"狗娃");
		System.out.println(p);
		*/
		Person p1 = new Person(110,"狗娃");
		Person p2 = new Person(110,"狗剩");
		//身份证一样,则两人相同
		System.out.println("p1与p2是同一个人吗?"+p1.equals(p2));
	}
}

虽然目前输出为true,但是两个对象的哈希码其实是不一样的,所以需要重写一下HashCode
HashCode的重写

class Person{
	int id;
	String name;
	public Person(){
		
	}
	public Person(int id,String name){
		this.id = id;
		this.name = name;
	}
	//目前我需要直接输出一个对象的时候,输出的格式是:编号:110 姓名:狗娃  这种格式。
	//目前toString方法无法满足子类的需求,那么这时候我们就应该对Object类的toString进行重写
	//快捷键toString+alt+/就会调出toString的方法,然后改写
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "编号:"+this.id+"\t姓名:"+this.name;
	}
	//重写equals,必须强制转换一下,不然obj和Person无法比较
	//object的equals方法默认比较的是两个对象的内存地址,我目前需要比较的是两个对象的身份证
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		Person p = (Person)obj;
		return this.id == p.id;
	}
	//重写哈希码,让他返回我们判断两个对象是否相同的证据就好
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return this.id;
	}
}

public class Demo4 {
	public static void main(String[] args) {
		/*
		Person p = new Person(110,"狗娃");
		System.out.println(p);
		*/
		Person p1 = new Person(110,"狗娃");
		Person p2 = new Person(110,"狗剩");
		//身份证一样,则两人相同
		System.out.println("p1与p2是同一个人吗?"+p1.equals(p2));
		System.out.println("p1哈希码"+p1.hashCode());
		System.out.println("p2哈希码"+p2.hashCode());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值