超类object

Object
–1,概述
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类
–2,创建对象
Object()
–3,常用方法
int hashCode()
返回该对象的哈希码值。
String toString()
返回该对象的字符串表示。
boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。
–4,测试1
package cn.tedu.api;
//测试 Object工具类
public class Test1_Object {
public static void main(String[] args) {
//1,创建Object对象
Object o = new Object();//触发无参构造

			//2,调用常用方法
			//366712642,o对象在内存中的哈希码值
			System.out.println( o.hashCode() );
			
			//java.lang.Object@15db9742,展示对象在内存中的地址值
			System.out.println( o.toString() );
	//		System.out.println(Integer.toHexString(366712642));
			
			//false,比较o对象和"jack"是否相等
			System.out.println( o.equals("jack") );
		}
	}


--5,测试2
	package cn.tedu.api;
	//测试 Object工具类
	//总结
	//1,Object是所有类的 超类/父类/基类
	//2,toString()--用来展示对象的字符串--重写前展示地址值--重写后展示属性值
	//3,equals()--比较两个对象是否相等--重写前比地址值--重写后比属性值
	//4,工具提供的快捷方式--source--toString()--equals()...
	public class Test2_Object2 {
		public static void main(String[] args) {
			Student s = new Student("渣渣辉",40);//触发了含参构造
			//使用了Object父类的,展示了哈希码值-366712642
			System.out.println( s.hashCode() );
			
			//使用了Object父类的,展示了地址值-cn.tedu.api.Student@15db9742
			System.out.println( s.toString() );
			//查看属性的值
			System.out.println( s.getName() );
			System.out.println( s.getAge() );
			
			//1,想要的是,直接输出s就看到s对象的属性值?
			//但是,输出的是地址值,cn.tedu.api.Student@15db9742
			//原因:在打印对象时,会调用了toString(),自己没提供,
			//才去找到了Object提供的,默认就是要打印一个地址值.
			//想要打印属性值,--需要提供重写的toString()
			//到底打印什么数据?-重写前,打印地址值.重写后,打印属性值
			//cn.tedu.api.Student@15db9742  ->   Student [name=渣渣辉, age=40]
			System.out.println(s);
			
			Student s1 = new Student("jack",20);
			Student s2 = new Student("jack",20);
		//3,equals()--比较对象是否相同,相同就返回true,不同就返回false
	//比较s1和s2相同吗--使用了Object提供的equals(),本来就是比较对象间的地址值
			//== 比较基本类型的变量时,比较的是值本身 ,如:1==2 false  1==1 true
			//== 比较 引用类型的变量时,比较的是地址值
			//需求:进行比较时,不想比较地址值,而是比较属性值,--重写equals()
			//如果所有属性都一样,那么就认为是相同的对象,equals返回true
		//equals()到底比较什么呢?--重写前,比的是地址值,重写后,比的是属性值
			System.out.println(  s1.equals(s2)  );
			//重写前是false,因为地址值不同 -> 重写后是true,因为属性值相同
		}
	}
	class Student{//省略了 extends Object
		//构造方法--方便外界new
		public Student() { }
		public Student(String name, int age) {
			super();//调用父类Object 的无参构造
			this.name = name;
			this.age = age;
		}
		
		private String name ;
		private int age ;
		
		//get()/set()--source
		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;
		}
		//2,重写toString()--目的是不再展示地址值,而是要想展示属性值
		//source -- generate toString()...ok
		@Override
		public String toString() {
			return "Student [name=" + name + ", age=" + age + "]";
		}
		//4,重写equals()--目的是比较的不再是两个对象间的地址值,而是属性值
		//source -- generate hashCode() and equals()...ok
		@Override
		public boolean equals(Object obj) {
			if (this == obj)
				return true;
			if (obj == null)
				return false;
			if (getClass() != obj.getClass())
				return false;
			Student other = (Student) 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;
		}
		
	//	@Override
	//	public boolean equals(Object obj) {
	//		//统一类型,是学生类型再比较
	//		Student s = (Student)obj ;
	//		//判断,如果每个属性都一样,就认为是同一个对象,让equals()返回true
	//		if(this.name==s.name  && this.age==s.age) {
	//			return true ;
	//		}
	//		return false;
	//	}
	}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页