toString/hashCode/String/equals

02_Object类

Java中常用的包

java.lang包 - 该包是java语言的核心包,该包里的所有内容由Java虚拟机自动导入;
			- 如:java.lang.String类/System类等......
			
java.util包 - 该包是java语言的工具包,体面提供了大量的工具类和集合等内容
			- 如:java.util.Scanner类/Random类、Arrays类等......
			
java.net包	- 该包是java语言的网络包,里面提供了大量的网络工信相关的类的内容
			- 如:java.net.ServerSocket类/Socket类等......
			
java.io包   - 该包是java语言的输入输出包,里面提供了大量读写文件的相关类
			- 如:java.io.PrintStream/InputStream
			
java.lang.reflect包 - 该包是java语言的反射包,里面提供了一些反射相关的类

基本概述

java.lang.Object类是所有层次结构的根类,任何类都是该类的直接/间接类

常用的方法

public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。 
equals 方法在非空对象引用上实现相等关系: 

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返
	   回true。 
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用
	   的信息没有被修改。 
	   
对于任何非空引用值 x,x.equals(null) 都应返回 false。 

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象
时此方法才返回 true(x == y 具有值 true)。 

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象须具有相等哈希码 


参数:
obj - 要与之比较的引用对象。 
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。

int hashCode():用于获取对象的哈希码值(内存地址或者编号)并返回
			   若两个对象调用equals()方法相等,则各自调用该方法得到的哈希码值也应该相等
			   若两个对象调用的equals()方法不相同,则各自调用该方法结果可以相同,但最好不相同

String toString 用于返回调用对象的字符串形式
				默认返回的字符串是:包名、类名 @ 哈希码的无符号十六进制形式
				当使用print()/println()打印引用变量的时候,会自动调用toString()方法
				当使用字符串进行拼接的时候会自动调用toString方法

Student.java

//Student类封装
public class Student {
	private int id;
	private String name;

	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		if(id>0) this.id=id;
		else System.out.println("学号不合理");
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	//重写equals方法
/*	public boolean equals(Object obj){
		//1.若两个对象地址相同,则内容一定相同
		if (this==obj) {//this是调用对象
			return true;
		}
		//2.若调用对象不为空参数,对象为空,内容肯定不相同
		else if (obj==null) {
			return false;
		}
		//3.若参数对象和调用对象类型一致,则由学号来决定两个对象内容是否相同
		else if (obj instanceof Student) {
			Student s = (Student)obj;
			if (this.getId()==s.getId()) {
				return true;
			}
			else {
				return false;
			}
		}
		//4.若是参数对象和调用对象类型不同,则内容一定不同
		else {
			return false;
		}
	}*/
}

TestSudent.java


public class TestStudent {
	public static void main(String[] args){
		Student s1 = new Student(1001,"zhangfei");
		Student s2 = new Student(1001,"zhangfei");
		
		System.out.println(s1+"      "+s2);//可以看出内存地址不同
		
		//equals方法默认比较对象地址
		//调用equals判断两个对象是否相等,这里默认从Object类中继承过来
		boolean b1=s1.equals(s2);//当前对象是s1和s2比较,所以不相等
		System.out.println("b1="+b1);//b1==false,因为对象不同,所以false
		System.out.println(s1==s2);//这里判断的是地址
		
		//那么如何单单比较内容是否相同呢?重写equals方法更改比较的规则
		//当重写equals方法后,则调用子类重写以后的版本
		
	}
}

String类重写了equals方法

System.out.println("你好".equals("你好"));
//返回值为true

重写hashCode方法

//用Alt+S重写HashCode,Override implement
	@Override//为了保证和euqals结果一致性,需要重写hashCode方法
	public int hashCode() {
		// TODO Auto-generated method stub
		return getId();
	}
//调用从Object类中继承的hashCode方法来获取对应的哈希码
		//当Student类中重写hashCode方法后,则调用重写以后的版本
		int res = s1.hashCode();
		System.out.println("res="+res);
		res=s2.hashCode();
		System.out.println("res="+res);

重写toString方法

@Override//为了打印对象中的成员变量值,则需要重写toString方法
	public String toString(){
		return "学号="+getId()+",姓名="+getName();
	}
String str1=s1.toString();
		System.out.println(str1);
		//直接输出s1默认会调用toString方法
		//因为String重写了toString方法,并且重写了equals方法
		System.out.println(s1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值