首页 > 作文

Java Object类和包装类深入解读

更新时间:2023-04-05 00:15:50 阅读: 评论:0

目录
查看源代码方法object类定义及应用1. tostring()2. equals( )包装类定义及应用装箱和拆箱自己实现包装类通过包装类让object类接收基本数据类型包装类的对象比较包装类和string的相互转换

查看源代码方法

在idea中双击 shift 键,可以搜索相关类名,查看源代码

点击structure ,左侧用橙色床框住的部分是类的结构,结构包含所有的方法、属性、内部类的声明。结构中带绿色小锁的图标表示 public 权限,钥匙图标就是继承权限(protected),红色锁的图标就是 private 权限。右边是源码。

object类

定义及应用

object类是所有类的默认父类,不需要使用 exten我成功了ds 显示继承,因此 object 类的所有方法(private 除外),所有类的对象都能使用。因此所有对象都可以通过object来接收

示例:

        object obj1 = "test";        object obj2 = new student("小陈",18);        object obj3 = 123;

在java中对object类做了扩充,使它不仅是所有类的父类,只要是引用数据类型,都可以向上转型为object类,包括数组和接口也就是说, object 类是引用数据类型的最高参数统一化

接下来我们来了解object类中两个常用的方法

1. tostring()

将任意对象转为字符串输出,打印对象内容。system.out.println()接收任意对象并输出,就是默认调用的 tostring方法

运行下面代码:

class student{    private string name;    private int age;    public student(string name,int age){        this.name = name;        this.age = age;    }}public class objectte辽宁考试st {    public static void main(string[] args) {        student s1 = new student("张三",17);        system.out.println(s1);    }}

运行结果:

可以看到不是我们预期的结果,为什么呢?我们来看看 tostring() 的源码

此时想要输出具体内容,就需要覆写 tostring()方法:

 public string tostring() {        return "student{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }

//输出:student{name=’张三’, age=17}

2. equals( )

比较两个对象是否相等,通常比较属性,承接上例,我们创建一个新对象和s1比较:

        student s1 = new student("张三",17);        student s2 = new student("张三",17);        system.out.println(s1.equals(s2));

//输出:fal

s1和s2的名字和年龄都是相同的,为什么输出结果为fal呢?让我们来看看equals方法的源码

有 new 就有新对象,所以s1和s2显然不是同一地址。此时student类默认使用的是object类提供的equals方法,对于object类而言,它不知道子类有哪些属性,所以比较的是对象的地址。

如果我们想要比较属性值就要覆写equals方法:

  public boolean equals(object obj){        //当前对象和传入的obj比较        //1.判断 obj 是否为空        if (obj == null){            return fal;        }        //2.判断obj是否就是自己,就是地址相同        if (obj == this){            return true;        }        //3.判断obj是否是该类的对象,比如传入一个字符串,它不是student类型,无法比        if (!(obj instanceof object) ){            return fal;        }        //4.此时obj一定是student类的对象,而且两个对象不是同一个地址        //向下转型还原为student,比较对象属性        student stu = (student) obj;        return this.name.equals(stu.name)&& this.age == stu.age;    }}

eq描写景色的句子uals方法t大写字母的覆写非常重要!!!一定要掌握,代码中应用到的 instanceof 和 向下转型的知识链接如下,感兴趣的可以去看看哦

详解java面向对象编程之多态

包装类

定义及应用

包装类就是将8种数据类型封装为类:

对象包装类(object雷的直接子类)

boolean、character

数值型包装类(number类的直接子类)

byte、short、integer、long、float、double

以integer 类为例应用:

 public static void main(string[] args) {        //将int -> 类        integer data = new integer(10);        //value就是将包装类的内容取出来        int a = data.intvalue();        system.out.println(a);    }

//输出:10

装箱和拆箱

装箱:将基本类型变为包装类对象

拆箱:将包装类对象中的数值还原为基本类型

在上述示例中:

在我们实际操作时,反复的拆装箱是很麻烦的,在java中为我们提供了自动装箱、拆箱

代码示例:

    public static void main(string[] args) {        integer a = 20;        int b = a+2;        system.out.println(b);    }

//输出:22

可以看到,a是integer类的对象,但它可以直接和整型数据做运算,实际上, integer a = 20;就是自动装箱,int b = a+2;就是自动拆箱过程。所以在用法上,包装类和基本类型没有区别。但是一定要记住,基本数据类型的默认值是0,包装类的默认值为null

那么我们什么时候使用包装类,什么时候使用基本数据类型呢?阿里编码规约做如下规定:

在类中定义成员变量,必须使用包装类声明在方法中,大量进行算术运算使用基本类型

自己实现包装类

public class intdemo {    //保存具体的整型值    private int data;    public intdemo(int data){        this.data = data;    }    public int intvalue(){        return this.data;    }     public static void main(string[] args) {        //将int -> 类        intdemo demo = new intdemo(10);        int data = demo.intvalue();        system.out.println(data+1);    }}

//输出结果:11

通过包装类让object类接收基本数据类型

我们已经知道object类可以接收所有引用类型,可遇到基本数据类型就行不通了,包装类就完美解决了这一问题。

使用object类接收,将上例的主方法做如下修改:

    public static void main(string[] args) {        //将int -> 类        intdemo demo = new intdemo(10);        object obj = demo;        intdemo demo1 = (intdemo) obj;        int data = demo1.intvalue();        system.out.println(data+1);    }

//输出:11

包装类的对象比较

统一使用 equals 方法

        integer a = 10;        integer b =10;        system.out.println(a .equals(b) );

//输出:true

包装类和string的相互转换

① 包装类 –> string:使用string.valueof()

② string –> 包装类 :使用包装类的par***()

代码实现:

      public static void main(string[] args) {        //integer -> string       integer x = new  integer(200);        string y = string.valueof(x);        system.out.println(y);         //string-> integer        string str ="123";        integer a = integer.parint(str);        system.out.println(a);      }

//输出结果:
200
123

注意string转换时若字符逗组词串不是纯数字组成,运行时就是出现类型转换异常。

到此这篇关于java object类和包装类深入解读的文章就介绍到这了,更多相关java object类内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-05 00:15:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b3acbfbd322c54d87f46b20ca2991e75.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java Object类和包装类深入解读.doc

本文 PDF 下载地址:Java Object类和包装类深入解读.pdf

下一篇:返回列表
标签:对象   方法   数据类型   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图