[Java][常用API]Object,Objects,StringBuilder

本文探讨了Java中的Object类基础知识,重点讲解了toString方法的作用和重写,以及equals方法的默认行为和如何自定义比较规则。通过Student类实例,展示了如何覆盖equals方法并确保内容比较而非地址。还提到了Objects类的使用,以增强安全性。
摘要由CSDN通过智能技术生成

Object类:

Object类要么默认继承Object类,要么简接继承Object类,Object类是祖宗类;

Object类的方法一切子类都可使用;

Object类常用方法:

toString:

父类toString方法存在的意义是为了被子类重写,以便返回对象内容信息

package wryyyyy;

public class Student
{
    private String name;
    private char sex;
    private int age;

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Student() {
    }

    @Override
    public String toString()
    {
        return "Student {name=" + name + ",sex" + sex + ",age=" + age +"}";
    }
}
package wryyyyy;

public class Test
{
    public static void main(String[] args)
    {
        Student s = new Student("小王",'男',19);
        String rs = s.toString();
        System.out.println(rs);//wryyyyy.Student@776ec8df 默认打出当前对象在堆内存中的地址
        System.out.println(s.toString());//toString可以不写


    }
}

equals:

父类equals方法存在的意义是为了被子类重写,以便返回子类自己制定比较规则

package wryyyyy;

public class Test
{
    public static void main(String[] args)
    {
        Student s1 = new Student("小王",'男',19);
        Student s2 = new Student("小王",'男',19);
        System.out.println(s1.equals(s2));//equals默认比较两个对象地址是否相同
    }
}

重写后equals比较内容,==比较地址: 

@Override
    public boolean equals(Object o)//用Object可以兼容与所有对象进行比较,不仅仅是学生对象
    {
        //先判断o是不是学生类型
        if(o instanceof Student)//判断o的真实类型
        {
            //判断两个对象内容是否一样
            if(this.name.equals(((Student) o).name) && this.sex==((Student) o).sex && this.age==((Student) o).age)
            /*
            * 字符串用equals 不用==
            * o要进行类型转换,否则o作为父类无法访问
            * */
            {
                return true;
            }
            //或者直接写成:
            //return this.name.equals(((Student) o).name) && this.sex==((Student) o).sex && this.age==((Student) o).age;
        }
        else//如果o不是学生类型(包括o是空类型)
        {
            return false;
        }
    }

Objects:

更安全

package wryyyyy;

import java.util.Objects;

public class Test
{
    public static void main(String[] args)
    {
        String s1 = null;
        String s2 = "teacher";
        //System.out.println(s1.equals(s2));//比较内容,返回true
        //可能出现空值异常
        System.out.println(Objects.equals(s1, s2));
        //这个更安全
    }
}

System.out.println(Objects.isNull(s1));//true

StringBuilder:

构造器:

常用方法:

StringBuilder sb = new StringBuilder();
        sb.append("a");
        sb.append("b");
        sb.append("c");
        sb.append(1);
        sb.append(false);
        sb.append(3.3);
        sb.append("qwer");
        System.out.println(sb);//输出的不是地址,说明已经进行了重写

StringBuilder链式编程

 StringBuilder sb1 = new StringBuilder();
        sb1.append("a").append("b").append("c");//拼完之后又返回原对象,所以继续拼
        System.out.println(sb1);

反转内容 

        sb1.reverse().append("d");//反转之后还会返回这个对象
        System.out.println(sb1);

取长度: 

System.out.println(sb1.length());

StringBuilder只是手段,最终的目的还是要恢复成String 

        String rs = sb1.toString();

String效率低的原因:
每次拼接都会产生新对象,不断占新对象的空间
每写一个+,都new一个StringBuilder,拼完后打出String对象

StringBuilder只在堆内存中产生一个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值