Object和包装类

本文介绍了Java中的Object类基础,如equals()、toString()、getClass()等方法的用法和区别,以及包装类的概念、类型转换和自动装箱拆箱。重点讲解了包装类与基本类型之间的转换,并通过面试题形式展示了实例应用。
摘要由CSDN通过智能技术生成

1.Object

1.1Object类概述

  • Object是类层次结构的根类
  • 每个类都使用Object作为超类
  • 所有对象包括数组都实现这个类的方法
  • 只有一个空参构造器
  • 默认每一个方法中都有一个super();用来接受这个构造方法

1.2API文档

Object常用方法可以通过API中去查询,具体位置是lang包下的object类

URL:JAVA API1.8

1.3Equals()

重写前比较地址值的(开发基本不用)

重写后比较实体内容(属性)(开发要这么用)

开发不需要手写equals但是要会写

可以使用IDEA的快捷键直接生成equals重写

Code

    //重写的原则:比较两个对象的实体内容是否相同(即name和age)
    public boolean equals(Object obj){
        //比较的是地址,相同就返回true
        if (this == obj){
            return true;
        }

        if (obj instanceof StudentList) {
            StudentList slt = (StudentList) obj;
            //&&如果a和b都是true 则返回true
            //比较两个对象的属性是否都相同 前面age为基本数据类型 后面name为引用数据类型
            return this.age == age
                    &&
                    this.name.equals(slt.name);
        }
        return false;
    }

测试类比较

        //重写前比较两个对象的地址值
        //重写后比较两个对象的实体内容(属性)
        boolean isEquals = studentList1.equals(studentList2);
        System.out.println("studentlist类型比较equals:"+isEquals);

        //==比较引用数据类型,比较的是地址值
        System.out.println("studentlist类型比较==:"+(studentList1 == studentList2));


        //==比较基本数据类型,比较的是值
        int a = 10;
        int b = 20;
        System.out.println("int类型比较:"+(a == b));

1.4toString()

重写前,调用返回的是地址值

重写后,更直观的显示实体内容属性

开发不需要手写toString但是要会写

可以使用IDEA的快捷键直接生成toString重写

重写方法

	@Override
 	//重写toString把参数返回到ToString类中
	public String toString() {
    //在ToString类中进行打印即可
    return "StudentList{" + "name='" + name + '\'' + ", age=" + age + '}';
}

测试类比较

	StudentLists=newStudentList("小白",3);
	//没用重写之前调用的是地址值
	//重写后输出的是属性值
	System.out.println(s);
	System.out.println(s.toString());

1.5getClass()

具体体现在反射

返回此Object的运行类

可以通过Class类中的一个方法,获取对象真实类的全名称

Code

	StudentList studentList =new StudentList("xiaohuia",13);
	//获取对象的类
	System.out.println(studentList.getClass());
	//获取对象的父类
	System.out.println(studentList.getClass().getSuperclass());

1.6hashCode()

具体使用在反射部分讲解
Code

	Object ob=new Object();
	int hashCode=ob.hashCode();
	System.out.println(hashCode);
	返回该对象的哈希码值 类型为int类型

1.7==和Equals()的区别

经典面试题

共同点
都可以做比较
返回值类型都是boolean

不同点

  1. ==是运算符,基本数据类型/比较引用数据类型都可以比较

  2. 基本数据类型比较的是数据值(类型可以不相同/除boolean)

  3. 引用数据类型是地址值,即两个对象是否指向同一个对象实体

  4. equals是方法,只能比较引用数据类型(底层依赖是==)

  5. 重写前,比较的是地址值<—>重写后,比较对象中的实体内容(属性)
    (后面的常用类基本上都重写了equlas方法,例如String、Date等)

注:比较地址值是没有意义的

2.包装类

2.1包装类概述

  1. 针对基本数据类型定义的相对应引用数据类型
  2. int写为Integer char写为Character 其他六种首字母大写(父类为Number)
  3. 有了类的特点,就可以调用类的方法,才是真正意义的面向对象
  4. 核心点就是基本数据类型、包装类、String三者的转换

2.2类型转换

2.2.1基本数据类型—>包装类
  1. 调用包装类构造器传参即可
  2. 如果传的是String就要保持是这个类型的格式
  3. Boolean对象的形参只要不是true,返回的就是false
  4. 包装类在不赋值默认输出为null(因为它是引用数据类型)

Code

        Integer i1 = new Integer(300);
        System.out.println(i1.toString());

        //传参为String时,之能为纯数字,否则就会报错
        Integer i2 = new Integer("300");
        System.out.println(i2.toString());

        //String状态下不是true这个词,返回就是false
        Boolean b1 = new Boolean("trdue");
        Boolean b2 = new Boolean("false");
        System.out.println(b1);
        System.out.println(b2);

        oreder or = new oreder();
	  //boolean默认返回false
        System.out.println(or.isFlag);
	  //包装类,不赋值,默认输出null
        System.out.println(or.isFLAG);
2.2.2包装类—>基本数据类型
  • 直接使用包装类的xxxValue()方法就可以了
    @Test	//Junit单元测试
    public void revereTest(){

        Float ft = new Float(13.2);

        float ft2 = ft.floatValue();

        System.out.println(ft2 + 26.9);
    }

2.3自动装箱 自动拆箱

  • JDK的新特性,1.5版本以后,取代了上面的两种方法

自动装箱

  1. 不需要去new一个对象
  2. 直接 包装类型 类型 = 基本数据类型名称 就可以了
  3. 相当于之前的转换方法被替代掉了

自动拆箱

  • 把包装类直接赋值给基本数据类型即可(除String)

Code

    //自动装箱
    int num1 = 1000;
    Interger it0 = num1;


    //自动拆箱
    Integer it1 = new Integer(300);

    System.out.println(it1.toString());

    int num2 = it1;
    System.out.println(num2 + 500);

2.4与String的转换

基本数据类型/包装类----->String
直接通过String的valueOf(xxx)重载方法

String----->基本数据类型/包装类
直接通过包装类的parseXXX()方法

Code

    @Test
    public void testReverseString(){
        String s1 = "123.456232";
        //自动拆箱体现
        float f1 = Float.parseFloat(s1);
        System.out.println(f1);

        String s2 = "TRUE";
        boolean b1 = Boolean.parseBoolean(s2);
        System.out.println(b1);
    }

2.5面试题

Code

    @Test
    public void testReverseString(){
        String s1 = "123.456232";
        //自动拆箱体现
        float f1 = Float.parseFloat(s1);
        System.out.println(f1);

        String s2 = "TRUE";
        boolean b1 = Boolean.parseBoolean(s2);
        System.out.println(b1);
    }

解释

  1. 返回为false具体看Integer源码的IntegerCache结构的的Integer[]
  2. Integer[]保存了-128~127的整数
  3. 在此范围内,直接使用此数字元素,无需再new,提高开发效率

判断输出

    @Test
    public void interviewTest(){
            //引用数据类型比较的地址值
            Integer i1 = new Integer(1);
            Integer i2 = new Integer(1);
            System.out.println(i1 == i2);

            //自动拆箱比较的是值
            Integer a = 2;
            Integer b = 2;
            System.out.println(a == b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值