Java寒假学习Day17:重写Object类中的方法与包装类的使用

前言:

总算缓过来了

前几天一直忙着各种各样的走亲戚

永远认不全谁是我的哪个长辈 TuT

随着后面学习内容的加深,更新的话也会少一些,毕竟写blog也就是自己给自己加约束,让自己能自律一些,目前来看自律是够的~

1.Object类中的方法重写

主要需要重写的方法有两个

1.1equals方法

1.1.1 equals方法和 == 运算符的比较

① 对于 == 运算符

== 既可以比较基本数据类型,也可以比较引用数据类型

== 在比较基本数据类型时,比较基本数据类型的值是否相同

== 在比较引用数据类型时,比较引用数据类型的地址是否相同

②对于equals方法来说

对于自己定义的类中的equals方法,如果自己没有进行对equals方法的重写,那就引用java.lang.euqals()方法,只进行“==”的比较

对于String类,Date类等的equals方法时,由于String类和Date类等对Object类的equals方法进行了重写,所以比较的就是值的大小

也就是说,调用了equals方法并不代表就是进行了值的比较

对于自己定义的类,虽然可以调用父类Object类中的equals方法,但是要实现值比较,需要自己对equals方法进行重写

equals方法的重写:

Java代码实现(作者本人想法的)

测试Bean类:people

public class people {
	private String name;
	private int age;
	
	public people() {
		
	}
	
	public people(String name , int age) {
		super();
		this.age = age;
		this.name = name;
	}
	
	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;
	}
	

	public static void main(String[] args) {
		people p1 = new people("hello", 21);
		people p2 = new people("hello", 21);
		System.out.println(p1.equals(p2));
        System.out.println(p1.getName().equals(p2.getName()));
	}
}

equals方法1:(自己写的)

	@Override
	public boolean equals(Object obj) {
		if(this == obj) {
			return true;
		}
		if(obj instanceof people) {
			people p = (people)obj;
			return this.age == p.age&&
					this.name.equals(p.name);
		}
		return false;
	}
	

 equals方法2:Java自动生成的

自动生成方法:

alt+shift+s ---> generate Hashcode() and equals() 勾选需要的属性即可

@Override
	public int hashCode() {
		return Objects.hash(age, name);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		people other = (people) obj;
		return age == other.age && Objects.equals(name, other.name);
	}

1.2toString方法

其实就是用于输出对象的

例如:

public class SYSO {

	
	public static void main(String[] args) {
		
		String s1 = "hello";
		people p1 = new people("hello",21);
		System.out.println(s1);
		System.out.println(p1);
		
	}
}

她就等效于:

public class SYSO {

	
	public static void main(String[] args) {
		
		String s1 = "hello";
		people p1 = new people("hello",21);
		System.out.println(s1.toString());
		System.out.println(p1.toString());
		
	}
}

只不过我们把toString方法给忽略了

很显然,我们需要的结果是:

hello 和 hello21

但是最后的结果为:

hello
WarrpTest.people@5e91f1e

原因也很简单,因为String类中已经实现了对toString方法的重写,它输出的就是String的内容

而我们自定义的people类并没有对toString进行重写,就按例调用Object类中的toString方法,输出她的类名和16进制的Hashcode值

想要输出正确的内容,则需要重写toString方法

举例如下(以people为例) 

@Override
	public String toString() {
		return "people [name=" + name + ", age=" + age + "]";
	}

快捷键:

alt+shift+s ---> generate toString() 勾选需要的属性即可

这样我们输出的就是我们需要的结果啦

测试如下:

hello
people [name=hello, age=21]

2.包装类

2.1包装类的定义

 

 2.2自动包装和解包(基本数据类型和包装类的转化)

在JDK5.0以后,基本数据类型和其对应的包装类可以直接看做同解,实现用包装类定义对应基本数据类型,或者用基本数据类型定义对应的包装类

即:

	public void testEx() {
		int i = 123;
		Integer in = i;
		
		Integer in1 = new Integer(123);
		int i1 = in1;
	}

2.3String和基本数据类型(包装类)的转化

import org.junit.Test;

public class WarrpTest {
	@Test
	//将String类型转换成基本数据类型
	public void test1(){
		String s1 = "123";
		//转换成基本数据类型
		//方法1:
		int i = Integer.parseInt(s1);
		System.out.println(i+1);
		//方法2:
		int ii = new Integer(s1);
		System.out.println(ii + 1);
		//转化成包装类
		Integer in1 = Integer.parseInt(s1);
		System.out.println(in1);
	}
	
	
	
	//将基本类型,包装类转成String
	@Test
	public void test2() {
		//基本数据类型
		int i = 123;
		String s1 = String.valueOf(i);
		System.out.println(s1);
		
		//包装类
		Integer in1 = new Integer(10);
		String s2 = String.valueOf(in1);
		System.out.println(s2);
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值