基本作用
在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。
感谢博主分享
接收任意引用类型的对象
既然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
以上程序使用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(); }复制代码