Object类

基本作用

在java中所有的类都有一个公共的父类,一个类只要没有明显地继承一个类,则肯定是Object类的子类。

class Person extends Object{
    
}
class Person{
    
}
复制代码

一个设计良好的类最好覆盖Object类中的equals()、hashCode()、toString()3个方法。

Object类提供的equals()方法默认是比较地址的。
Object类中的equals()方法实际上也是可以使用的,但是其默认使用的是按地址进行比较,并不能对内容进行比较。
复制代码
package com.dzj.object;

public class Person {
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
    // 覆写Object类中的equals()方法
	public boolean equals(Object obj) {
		if (this == obj) {// 如果两个对象的地址相等,则肯定是同一个对象
			return true;
		}
		// 判断传进来的对象是否是Person的例子
		if (!(obj instanceof Person)) {
			return false;
		}
		// 将传进来的对象向下转型
		Person per = (Person) obj;
		if (per.name.equals(this.name) && per.age == this.age) {// 逐个属性比较,看是否相等
			return true;
		} else {
			return false;
		}
	}
	public String toString() {
		return "姓名: " + this.name + "; 年龄:" + this.age;
	}
}

复制代码

在Person类中覆写了equals()方法,首先判断传递进来的对象与当前对象的地址是否相等,如果相等,则肯定是同一个对象,因为在equals()方法处传递的参数是Object类型,所以任何对象都可以接收,这样在对象进行向下转型前就必须进行判断,判断传进来的对象是否是Person的示例,如果不是,则直接返回false;如果是,则将各个属性以此进行判断。

在编写测试方法时,为了测试程序的合理性,传入一个字符串类型的对象,从结果可以清楚地看出,因为字符串不是Person类型的对象,所以直接返回了false。

感谢博主分享 Java hashCode() 和 equals()的若干问题解答

接收任意引用类型的对象

既然Object类是所有对象的父类,则所有的对象都可以向Object进行转换,在这其中也包括了数组和接口类型,即一切的引用数据类型都可以使用Object进行接收。

使用Object接收接口实例
package com.dzj.object;
public interface A {
   public String getInfo();
}
复制代码
package com.dzj.object;
public class B implements A{
	@Override
	public String getInfo() {
		return "Hello World";
	}
}

复制代码

public class ObjectDemo {
	public static void main(String[] args) {
       A a = new B();//为接口实例化
       Object obj = a;//对象向上转型
       A x = (A) obj;//对象向下转型
       System.out.println(x.getInfo());
	}
}
//Hello World
复制代码

通过以上代码可以发现,虽然接口不能继承一个类,但是依然是Object类的子类,因为接口本身是引用数据类型,所以可以进行向上转型操作。

同理,也可以使用Object接收一个数组,因为数组本身也属于引用数据类型

使用Object接收数组
package com.dzj.object;
public class ObjectDemo2 {
   public static void main(String[] args) {
	  int temp[] = {1,3,5,7,9};
	  //使用Object接收数组。
	  Object obj = temp;//传递数组引用
	  print(obj);
}
   //接收一个对象
   public static void print(Object o){
	   if (o instanceof int[]){//判断对象的类型
		   int x[]= (int[])o;//向下转型
		   for(int i=0;i<x.length;i++){//循环输出
			   System.out.println(x[i] + "\t");
		   }
	   }
   }
}
//1 3 5 7 9
复制代码

以上程序使用Object接收一个整型数组,因为数组本身属于引用数据类型,所以可以使用Object接收数组内容,在使用print()方法输出时先通过instanceof判断类型是否是一个整型数据,然后进行输出操作。

包装类

包装类的介绍

在java的设计中,提倡一切皆对象。从数据类型的划分中可以知道java中的数据类型分为基本数据类型和引用数据类型,但是基本数据类型怎么能够成为对象呢?此时为了解决此问题就需要将8种基本类型包装成一个类的形式,那么这也就是包装类的作用。

Integer、Byte、Float、Double、Short、Long都属于Number类的子类,Number类本身提供了一系列的返回以上6种基本数据类型的操作。

Character属于Object的直接子类。

Boolean属于Object的直接子类。

Number类是一个抽象类,主要将数字包装类中的内容变为基本数据类型,

public byte byteValue();
public abstract double doubleValue();
public abstract float floatValue();
public abstract int intValue();
public abstract long longValue();
public abstract short shortValue();
复制代码
装箱和拆箱
概念

将一个基本数据类型变为包装类==装箱操作;相反即为拆箱。

装箱和拆箱操作:

package com.dzj.object;
public class WrapperDemo {
   public static void main(String[] args) {
	  int x = 30;//声明一个基本数据类型
	  Integer i = new Integer(x);//装箱:将基本数据类型变为包装类
	  int intValue = i.intValue();//将一个包装类变为基本数据类型
	  //浮点数装箱及拆箱
	  float f = 30.3f;
	  Float a = new Float(f);
	  float floatValue = a.floatValue();
}
}
复制代码

以上手工装箱和拆箱操作,这是jdk1.5之前的做法,在jdk1.5之后提供了自动的装箱及拆箱操作。

      Integer b = 30;//自动装箱成Integer
	  Float c = 30.3f;//自动装箱成Float
	  int d = b;//自动拆箱为int
	  float y = c;//自动拆箱为float
复制代码
包装类应用

包装类在实际中用得最多的是字符串变为基本数据类型的操作。

Integer类(字符串转int型)

public static int parseInt(String s) throws NumberFormatException
复制代码

Float类(字符串转float型)

public static float parseFloat(String s) throws NumberFormatException
复制代码

使用以上方法,一定要注意字符串必须由数字组成。

字符串==基本数据类型

      String str1 = "30";//由数字组成的字符串
	  String str2 = "30.3";//由数字组成的字符串
	  int x1 = Integer.parseInt(str1);//将字符串变为int类型
	  float f1 = Float.parseFloat(str2);//将字符串变为float类型
复制代码

字符串==boolean类

 public static boolean parseBoolean(String s) {
        return ((s != null) && s.equalsIgnoreCase("true"));
    }
复制代码
        Object[]o =(Object[])r;
        String diseaseName=String.valueOf(o[1]);
        String symptom=String.valueOf(o[2]);
        boolean miss= Boolean.parseBoolean(String.valueOf(o[3]));
复制代码
public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值