Object类简介
Object类接收任意类型的对象
toString方法
equals方法
包装类简介
包装类的应用
Object类简介
- Object类是java的一个内置类,属于java.lang包, 此包下的所有类在使用时无需手动导入,程序在编译期间将自动导入
- Object类是所有类的父类,一个类如果没有明确继承自某个类将自动继承自Object类
以下2种类的定义效果相同
class Person{}
class Person extends Object{}
既然Object类是所有类的父类,那么说所有的类都可以向Object类发生向上转型,即可以右Object类接收任意类型的对象,这其中也包括数组(数组是引用数据类型)
- Object接收对象
//验证object接收任意类型的对象
class Person{
public String name;
public int age;
public Person(){};//无参构造
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getInfo(){
return"姓名:"+this.name+"年龄:"+this.age;
}
}
public class ObjectTest{
public static void main(String[]args){
Object obj=new Person("李四",28);//向上转型
if(obj instanceof Person){
Person pr=(Person)obj;//向下转型
System.out.println(pr.getInfo());
}
}
}
output:
姓名:李四年龄:28
- Object接收数组
public class Animal {
private int length;
public static void main(String[] args) {
int a[]={3,4,5,6,7};
Object obj=a;//向上转型
if(obj instanceof int []){
int b[]=(int [])obj;//向下转型
for(int w:a)
System.out.print(w+",");
}
}
}
output:
3,4,5,6,7,
在Object类中定义了很多方法,所有类自动继承自object类,也就是说所有的类天生就具有object类中定义的方法,其中最常用的为toString方法和equals方法
toString方法
toString方法作用为打印对象的信息
**该方法源码**
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
getClass().getName()是返回对象的全类名(包含包名),Integer.toHexString(hashCode()) 是以16进制无符号整数形式返回此哈希码的字符串表示
注意:打印某个对象时,默认是调用 toString 方法,比如 System.out.println(person),等价于 System.out.println(person.toString())
该方法用于返回对象的信息,但object类中默认的toString返回的对象信息不易理解或者不够直观,所有在实际使用时,一般覆写该方法,以达到返回对象的信息完整直观
//覆写object类的toString方法
class Person{
public String name;
public int age;
public String sex;
public Person(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
}
//覆写Object类的toString方法
public String toString(){
return super.toString()+" 姓名 "+this.name+" 年龄:"+this.age+" 性别:"+this.sex;
}
}
public class ToStringTest{
public static void main(String[]args){
Person pr=new Person("张三",23,"男");
System.out.println(pr);
}
}
output:
Person@15db9742 姓名 张三 年龄:23 性别:男
这样让对象的信息更加完整直观
- 该方法和字符串打印的联系
在我们的实际使用中:
String str="hello";
Sysetem.out.println(str);
打印str对象的时候将自动调用toString,但打印出来的是对象本身,而不是一个地址信息,这里可以猜测到在String类中也是将toString方法覆写了
equals方法
在object类中的equals方法实现的是对对象的引用的比较,即比较的是对象的地址,地址相同对象一定相同,但有些情况下地址不同对象也有可能相同。在String类中的equals方法实现的是对象的比较,可以知道其肯定也是覆写了object类的equals方法。而我们要想运用好equals方法对对象的精确比较,则需要对equals方法进行覆写
//对object类中的equals方法进行覆写实现对象的比较
class Person{
public String name;
public int age;
public String sex;
public Person(String name,int age,String sex){
this.name=name;
this.age=age;
this.sex=sex;
}
//覆写equals
public boolean equals(Object obj){
if(this==obj)//传入自身
return true;
if(!(obj instanceof Person) )//传入的对象不为Person类的实例
return false;
Person pr=(Person)obj;//进行具体属性的比较,需向下转型
if(pr.name.equals(this.name)&&pr.age==this.age&&pr.sex.equals(this.sex))
return true;
else return false;//有的属性不等则为false
}
}
public class EqualsTest{
public static void main(String[]args){
Person pr1=new Person("张三",23,"男");
Person pr2=new Person("张三",23,"男");
if(pr1.equals(pr2))
System.out.println("这两个人是同一个人!");
else System.out.println("这两个人不是同一个人!");
}
}
output:
这两个人是同一个人!
包装类
在java中提倡万物皆对象,但这就有矛盾了,java的基本数据类型不是对象,为了解决这一点,提出了包装类。
所谓包装类就是将基本数据类型包装成一个类,让其具备类的特性
只有int 和char和之前的写法不一样,其他都一样
Character和Boolean为Object的直接子类,另外6中类为Number类的直接子类
将一个基本数据类型转化为包装类,称为装箱操作,而将一个包装类转化为基本数据类型称拆箱操作
- 包装类基础--开箱 拆箱操作
public class NumberTest{
public static void main(String[]args){
int a=4;
Integer b=new Integer(a);//装箱 用的Integer的构造方法
int c=b.intValue();//拆箱 用的Integer覆写自其父类Number的方法
float m=4.3f;
Float n=new Float(m);//装箱
float w=n.floatValue();//拆箱
}
}
为了简化上述操作 在jdk1.5提供了自动装箱和拆箱
public class NumberTest{
public static void main(String[]args){
int a=4;
Integer b=a;//自动装箱
int c=b;//自动拆箱
Float m=3.5f;//自动装箱
float n=m;//自动拆箱
}
}
包装类的应用以及基本数据类型和字符串的相互转化
包装类的常用方法*
包装类主要是两种方法,一种是本类型和其它类型之间进行转换,另一种是字符串和本类型以及基本类型之间的转换
如上图中的方法前五种是本类型和其他类型之间的转换(在装箱和开箱时已经演示),后三种是字符串和本类型以及基本类型之间的转换
- 基本数据类型转化为字符串
函数头举例Integer类:public static String toString(int i) 返回一个指定整形的String 对象
String类的valueOf()返回一个基本数据类型的字符串表示
public static String valueOf(char c)
返回 char 参数的字符串表示形式
举例
//基本数据类型转化为字符串的三种方法
public class NumberTest{
public static void main(String[]args){
double a=3.4;
String str1=Double.toString(a);//Double类的toString()方法
String str2=String.valueOf(a);//String类的valueOf()方法
String str3=a+"";//基本数据类型+空字符串
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
output:
3.4
3.4
3.4
- 字符串转化成基本数据类型
valueOf方法头举例(Integer类) public static Integer valueOf(String str) 返回指定的Sring值的对象
parse*方法头举例(Integer类) public static int parseInteger(String str) 将字符串参数作为有符号的十进制整数进行解析。
举例说明 - 数字转化异常
public class NumberTest{
public static void main(String[]args){
String str="hello world";
int a=Integer.valueOf(str);//包装类的valueOf()方法,注意:该部进行了自动拆箱
int b=Integer.parseInt(str);
}
}
output:
NumberFormatException.java:65) 数字转化异常
对于字符串里面的内容不是最后转化的基本数据类型的数值,将会出现数字转化异常 NumberForamtExecption
正常情况下
//基本数据类型转化为字符串的三种方法
public class NumberTest{
public static void main(String[]args){
String str="234323222";
int a=Integer.valueOf(str);//包装类的valueOf()方法,注意:该部进行了自动拆箱
int b=Integer.parseInt(str);//包装类的parse基本数据类型函数
System.out.println(a);
System.out.println(a);
}
}
output:
234323222
234323222
标签:String,包装,Object,Person,int,toString,public,浅谈
From: https://www.cnblogs.com/swtaa/p/16879414.html