文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java Object类和包装类的示例分析

2023-06-29 04:04

关注

这篇文章给大家分享的是有关Java Object类和包装类的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

查看源代码方法

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

Java Object类和包装类的示例分析

Java Object类和包装类的示例分析

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

Object类

定义及应用

Object类是所有类的默认父类,不需要使用 extends 显示继承,因此 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 ObjectTest {    public static void main(String[] args) {        Student s1 = new Student("张三",17);        System.out.println(s1);    }}

运行结果:

Java Object类和包装类的示例分析

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

Java Object类和包装类的示例分析

此时想要输出具体内容,就需要覆写 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));

//输出:false

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

Java Object类和包装类的示例分析

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

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

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

equals方法的覆写非常重要!!!一定要掌握,代码中应用到的 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 Object类和包装类的示例分析

在我们实际操作时,反复的拆装箱是很麻烦的,在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 --> 包装类 :使用包装类的parse***()

代码实现:

  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.parseInt(str);        System.out.println(a);      }

//输出结果:
          200
          123

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

感谢各位的阅读!关于“Java Object类和包装类的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯