01_使用API_Object类与包装类

什么是 API
  • API ( Application Programming interface ):应用程序编程接口
  • 就是 Java 帮我们已经写好一些程序,如:类、方法等,我们直接拿过来用就可以解决一些问题
  • 使用别人写好的程序,可以帮我们提高开发效率,站在巨人的肩膀上,做更有意义的事情
Object 类的作用
  • Object 类是 Java 中所有类的祖宗类,因此,Java 中所有类的对象都可以直接使用 Object 类中提供的一些方法

  • Object 类的常见方法

toString()equals()clone()
返回对象的字符串表示形式判断两个对象是否相等对象克隆
import java.util.Objects;

public class Test {
    public static void main(String[] args) {
        // 1. toString()方法
        Student s1 = new Student("Jack");
        System.out.println(s1.toString());  // 返回对象内存地址的字符串形式:login.Student@3b07d329
        System.out.println(s1);  // 默认也是返回对象的内存地址:login.Student@3b07d329

        // 所以toString()常用的使用方式是:对toString()进行重写,返回我们真正需要的关于对象的信息,而不是内存地址
        System.out.println(s1.toString());  // 重写后,输出结果为:Student{name='Jack'}

        // 2. equals()方法
        Student s2 = new Student("Jack");
        System.out.println(s2.equals(s1));  // 比较两个对象的地址是否相同; 输出结果:false
        System.out.println(s2 == s1);  // 默认也是比较两个对象的地址是否相同; 输出结果:false

        // 所以equals()常用的使用方法是:对equals()进行重写,比较对象的信息是否一致,而不是比较内存地址
        System.out.println(s2.equals(s1));  // 重写后,输出结果:true
        
    }
}

class Student {  // 默认就继承了 Object 类
    private String name;

    public Student() {
    }

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 重写 Object 父类的 toString() 方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }

    // 重写equals方法,比较两个对象的内容是否一样
    @Override
    public boolean equals(Object o) {
        // 1. 判断两个对象地址是否一样,一样直接返回true
        if (this == o) return true;
        // 2. 如果o是null或者如果两者类型不一致,直接返回
        // 这里的" getClass() != o.getClass() " 其实是省略了" this " 的
        // 即原来是" this.getClass() != o.getClass() "
        if (o == null || getClass() != o.getClass()) return false;
        // 3. 如果都不是上面的情况,就进行类型转换,然后比较数据
        Student student = (Student) o;
        return Objects.equals(this.name, student.name);
    }
}
Objects
  • Objects 是一个工具类,提供了很多的操作对象的静态方法给我们使用
  • Objects 类的常见方法
方法名说明
public static boolean equals (Object a, Object b)我们;源码分析见下
public static boolean isNull(Object obj)判断对象是否为null,为null返回true,反之
public static boolean nonNull(Object obj)判断对象是否不为null,不为null则返回true,反之

源码分析:底层实现原理是——先做非空判断,再比较两个对象

public static boolean equals(Object a, Object b){
    return (a == b) || (a != null && a.equals(b));
}
包装类

1.包装类就是把基本数据类型的数据包装成对象

基本数据类型对应的包装类(引用数据类型)
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        // 一般的方式
        Integer obj1 = Integer.valueOf(12);
        System.out.println(obj1);  // 输出结果:12

        // 自动装箱:可以自动把基本类型的数据转换成对象
        Integer obj2 = 12;

        // 自动拆箱:可以自动把包装类型的对象转换成对应的基本数据类型
        int a = obj2;

        // 泛型和集合不支持基本数据类型,只能支持引用数据类型
//      ArrayList<int> list1 = new ArrayList<>();  // 报错
        ArrayList<Integer> list2 = new ArrayList<>();  // 正常
        list2.add(33);  // 自动装箱
        list2.add(44);  // 自动拆箱

        int res = list2.get(1);  // 自动拆箱
    }
}

2.包装类的其他常见操作

  • 可以把基本类型的数据转换成字符串类型
  • 可以把字符串类型的数值转换成数值本身对应的数据类型
public class Test {
    public static void main(String[] args) {
        // 1. 把基本类型的数据,转换成字符串
        Integer a = 23;
        String res = Integer.toString(a);
        System.out.println(res + 1);  // 输出结果:231

        // 2. 把字符串类型的数据,转换成对应的基本数据类型
        String ageStr = "29";
        int age = Integer.parseInt(ageStr);
        System.out.println(age + 1);  // 输出结果:30

        // 然后,实际开发中,推荐使用 valueof(),记住一个就能用在所有的数据类型
        String scoreStr = "98";
        int score = Integer.valueOf(scoreStr);
        System.out.println(score + 2);  // 输出结果:100

        String idStr = "0.5";
        double id = Double.valueOf(idStr);
        System.out.println(id + 0.5);  // 输出结果:1.0
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值