Java基础:Object类中的常用方法

1、toString()方法

1.1 作用

返回一个对象默认的字符串形式

public class Object{
	public String toString() {        
	return getClass().getName() + "@" + Integer.toHexString(hashCode());   }
}

1.2 子类可以重写toString()方法

public class Student{    
	private String name;   
	private int age;        
	//get方法
	//set方法     
	 public String toString() {        
	 return "Student[name="+name+",age="+age+"]";   
	 } 
}

1.3 toString方法的调用

public static void main(String[] args){    	
	Student stu = new Student();    
	//这个俩个输出语句的效果是一样的    
	System.out.println(stu);    
	System.out.println(stu.toString());
}

注意:默认情况下println方法会调用这个对象的toString方法
推荐使用第一种,因为当stu的值为null时,第二种输出方式会报错,空指针异常

2、getClass方法

该方法可以返会指向对象具体是什么类型的,该方法是被native修饰的本地方法,不是java实现的,子类不能重写getClass()方法,所以调用的一定是Object中的getClass方法

public void test(Object obj){
	syso(obj.getClass()); //获取创建obj对象是属于哪个类的
}

3、equals方法

作用:比较两个对象是否相等

public class Object{    
	public boolean equals(Object obj) {        
	return (this == obj);   
	}
}

可以看出,Object中的equals方法,是直接使用的==号进行的比较,比较俩个对象的地址值是否相等
如:

public static void main(String[] args){       
	Student o1 = new Student();    
	Student o2 = new Student();        
	boolean f = o1.equals(o2);    
	System.out.println(f); //false
}

子类对equals方法重写后

public class Student {    
	private String name;    
	private int age;    
	public Student(){}    
	public Student(String name, int age) {        
	this.name = name;       
	this.age = age;   
	}    
	@Override    
	public boolean equals(Object obj) {        
	//如果obj为null,直接返回false        
	if(obj == null){            
	return false;       
	}        
	//如果obj和this的地址值相等,直接返回true        
	if(this == obj){            
	return true;
	}        
	//如果obj不属于Student类型的对象,直接返回false        
	if(!(obj instanceof Student)){            
	return false;       
	}        
	//obj属于Student类型的对象,做类型强制转换        
	Student other = (Student) obj;        
	//如果obj的name和age分别等于this的name和age,直接返回true        
	if(this.name.equals(other.name) && this.age==other.age){            
	return true;       
	}        
	//其他情况,直接返回false        
	return false;   
	}
}
class StudentTest{    
	public static void main(String[] args) {        
	Student s1 = new Student("tom",20);        
	Student s2 = new Student("tom",20);        
	System.out.println(s1 == s2);//输出false,因为俩对象的内存地址不同        		
	System.out.println(s1.equals(s2));//输出true,因为重写了equals的比较规则,name和age相等就算俩对象相等   }
}

与“==”做比较

==
(1)基本类型:比较的是字面值
(2)引用数据类型:比较的是地址值

equals
(1)直接继承自父类,用法和==一样
(2)重写父类中的equals方法,将按照重写后的规则比较

4、hashCode方法

返回一个int值,该int值是JVM根据对象在内存的中的特征(地址值),通过hash算法计算出的一个结果。
Object中的hashCode方法默认返回的是对象的内存地址,但是实际上可能并不是。

对于俩个对象的hashCode值:
(1)相等的俩个对象,hashCode值一定相等
(2)hashCode值相同,俩个对象有可能相等,也可能不同等
(3)hashCode值不同,俩个对象一定不同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值