package cn.itcast.object;
/*
找对象的方式:
方式一: 自定义类,通过自定义类创建对象。
方式二:sun定义好了很多的类,我们只需要认识这些类即可通过这些类创建对象为我们所用。
Object 类:
Object类是所有类的终极父类。
Object类常用的方法:
toString() 返回的字符串是用于描述该对象的
equals(Object obj) 判断两个对象是否为同一个对象, 默认比较 的是内存地址。
hashCode() 返回一个对象的哈希码值。哈希码 值可以看做一个对象的内存地址。
java规范: 一般我们在重写equals方法的时候,我们都会重写hashCode方法.
查看源代码的方式:
方式一: 按住ctrl+ 鼠标单击
方式二: 按下f3
*/
class User{
int id;
String userName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public User(int id, String userName) {
super();
this.id = id;
this.userName = userName;
}
/*
为什么要重写toString方法? 因为直接输出一个user
对象的时候输出的是该对象的toString方法返回 的字符串,该字符串是Object的toString方法返回的不能
满足我目前的需求,所以则进行了重写。
*/
@Override
public String toString() {
return "身份证:"+ this.id+" 姓名:"+ this.userName;
}
//如果一个人的身份证编号一致,那么则为同一个人。
@Override
public boolean equals(Object obj) {
User user = (User)obj;
return this.id== user.id;
}
@Override
public int hashCode() {
return this.id;
}
}
public class Demo1 {
public static void main(String[] args) {
/*
Object o = new Object();
System.out.println("toString: "+ o.toString()); //默认情况返回的字符串:完整类名+ @+ 哈希码
System.out.println(o); //疑问: 直接输出一个对象的时候输出的字符串竟然与toString方法返回的字符串一致?
User user = new User("admin","123");
System.out.println(user); //直接输出一个对象,其实就是输出该对象的toString方法返回的字符串。
User user2 = new User("guest","root");
System.out.println(user2);
但是在现实生活中,如果一个人的身份证编号一致,那么则为同一个人。
*/
User user1 = new User(110,"狗娃");
User user2 = new User(110,"陈福狗");
System.out.println("是同一个对象吗?"+ user1.equals(user2));
System.out.println("哈希码1:"+ user1.hashCode());
System.out.println("哈希码2:"+ user2.hashCode());
}
}