Java常用API(一)Object与Objects

简介: Java常用API(一)Object与Objects

Java常用API(一)Object与Objects

Object

基本介绍

Object 类是 Java 中的祖宗类,Object 类的方法是一切子类都可以直接使用

Object 类常用方法:

  • public String toString():默认是返回当前对象在堆内存中的地址信息:类的全限名@内存地址,例:Student@192536;
  • 直接输出对象名称,默认会调用 toString() 方法,所以省略 toString() 不写;
  • 如果输出对象的内容,需要重写 toString() 方法,toString 方法存在的意义是为了被子类重写 就是转换String
  • public boolean equals(Object o):默认是比较两个对象的引用是否相同
  • protected Object clone():创建并返回此对象的副本

面试题:== 和 equals 的区别

  • == 比较的是存放的对象的内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象,比较的是真正意义上的指针操作
  • Object 类中的方法,默认比较两个对象的引用,重写 equals 方法比较的是两个对象的内容是否相等,所有的类都是继承自 java.lang.Object 类,所以适用于所有对象

hashCode 的作用:

  • hashCode 的存在主要是用于查找的快捷性,如 Hashtable,HashMap 等,可以在散列存储结构中确定对象的存储地址
  • 如果两个对象相同,就是适用于 equals(java.lang.Object) 方法,那么这两个对象的 hashCode 一定要相同
  • 哈希值相同的数据不一定内容相同,内容相同的数据哈希值一定相同

深浅克隆

Object 的 clone() 是 protected 方法,一个类不显式去重写 clone(),就不能直接去调用该类实例的 clone() 方法

深浅拷贝(克隆)的概念:

  • 浅拷贝 (shallowCopy):对基本数据类型进行值传递,对引用数据类型只是复制了引用,其实就是增加了一个指针指向原来对象的内存地址(学过c的小伙伴应该可以理解)
    Java 中的复制方法基本都是浅拷贝:Object.clone()、System.arraycopy()、Arrays.copyOf()
  • 深拷贝 (deepCopy):对基本数据类型进行值传递,对引用数据类型是一个整个独立的对象拷贝,会拷贝所有的属性并指向的动态分配的内存,简而言之就是把所有属性复制到一个新的内存,增加一个指针指向新内存。所以使用深拷贝的情况下,释放内存的时候不会出现使用浅拷贝时释放同一块内存的错误

Cloneable 接口是一个标识性接口,即该接口不包含任何方法(包括 clone),但是如果一个类想合法的进行克隆,那么就必须实现这个接口,在使用 clone() 方法时,若该类未实现 Cloneable 接口,则抛出异常

  • Clone & Copy:Student s = new Student
    Student s1 = s:只是 copy 了一下 reference,s 和 s1 指向内存中同一个 Object,对对象的修改会影响对方
    Student s2 = s.clone():会生成一个新的 Student 对象,并且和 s 具有相同的属性值和方法

Objects

Objects 类与 Object 是继承关系

Objects 的方法:

  • public static boolean equals(Object a, Object b):比较两个对象是否相同
public static boolean equals(Object a, Object b) {
    // 进行非空判断,从而可以避免空指针异常
    return a == b || a != null && a.equals(b);
}
  • public static boolean isNull(Object obj):判断变量是否为 null ,为 null 返回 true
  • public static String toString(对象):返回参数中对象的字符串表示形式
  • public static String toString(对象, 默认字符串):返回对象的字符串表示形式
public class ObjectsDemo {
    public static void main(String[] args) {
        Student s1 = null;
        Student s2 = new Student();
        System.out.println(Objects.equals(s1 , s2));//推荐使用
        // System.out.println(s1.equals(s2)); // 空指针异常
        System.out.println(Objects.isNull(s1));
        System.out.println(s1 == null);//直接判断比较好
    }
}
public class Student {
}
目录
相关文章
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
9 2
|
8天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
29 4
|
8天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
41 4
|
17天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
23天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
1月前
|
存储 Java API
如何使用 Java 中的 API 更改 PDF 纸张大小
如何使用 Java 中的 API 更改 PDF 纸张大小
40 11
|
1月前
|
机器学习/深度学习 算法 Java
通过 Java Vector API 利用 SIMD 的强大功能
通过 Java Vector API 利用 SIMD 的强大功能
37 10
|
1月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
26 1
|
30天前
|
SQL Java API
深入探索Java的持久化技术——JPA(Java Persistence API)
【10月更文挑战第10天】深入探索Java的持久化技术——JPA(Java Persistence API)
22 0
|
30天前
|
Java API 数据库
深入探索Java的持久化技术——JPA(Java Persistence API)
【10月更文挑战第10天】深入探索Java的持久化技术——JPA(Java Persistence API)
35 0

热门文章

最新文章