当前位置: 首页 > backend >正文

反射机制补充

不同对象实例的地址不同

在 Java 里,每当使用 new 关键字创建一个对象时,JVM 会在堆内存中为该对象分配一块新的内存空间,每个对象实例都有自己独立的内存地址。所以不同的对象实例,其内存地址是不同的。

以下是一个简单示例:

class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}
}public class ObjectInstanceExample {public static void main(String[] args) {User user1 = new User("zhangsan", 20);User user2 = new User("lisi", 25);System.out.println(user1 == user2); // 输出 false,因为它们是不同的对象实例}
}

在这个例子中,user1 和 user2 是两个不同的 User 对象实例,它们在堆内存中有不同的地址,所以 user1 == user2 的结果为 false

类的 Class 实例的唯一性

Java 里每个类在 JVM 中只有一个对应的 Class 实例,这个 Class 实例代表了该类的类型信息,它被存储在方法区(JDK 8 之前)或元空间(JDK 8 及以后)。无论通过多少个该类的对象去获取 Class 实例,或者使用 Class.forName 方法获取,最终得到的都是同一个 Class 实例。

下面是之前示例的代码:

class User {private String name;private int age;public User(String name, int age) {this.name = name;this.age = age;}
}public class ReflectTest {public static void main(String[] args) throws ClassNotFoundException {Class userClass = Class.forName("User");User user = new User("zhangsan", 20);Class userClass2 = user.getClass();User user2 = new User("lisi", 25);Class userClass3 = user2.getClass();System.out.println(userClass2 == userClass); System.out.println(userClass2 == userClass3); System.out.println(userClass == userClass3); }
}

在这个例子中,user 和 user2 是不同的 User 对象实例,它们在堆内存中有不同的地址。但是 userClassuserClass2 和 userClass3 都是 User 类的 Class 实例,它们指向方法区(或元空间)中同一个 Class 对象,所以 userClass2 == userClassuserClass2 == userClass3 和 userClass == userClass3 的结果都为 true

综上所述,不同的对象实例地址不同,但同一个类的 Class 实例是唯一的,这就是为什么比较类的 Class 实例时结果为 true 的原因。

http://www.xdnf.cn/news/3643.html

相关文章:

  • 滥用绑定变量导致Oracle实例宕机
  • Python数据结构与算法
  • [面试]SoC验证工程师面试常见问题(一)
  • AE脚本 关键帧缓入缓出曲线调节工具 Flow v1.5.0 Win/Mac
  • 使用 Tesseract 实现藏文OCR
  • 2025eBay母亲节消费图谱:非标商品5倍溢价背后的情感经济革命
  • Codeforces Round 1022 (Div. 2) D. Needle in a Numstack(二分)
  • 深入解析C++11基于范围的for循环:更优雅的容器遍历方式
  • 系统思考与第一性原理
  • sizeof的用途
  • 第 6 篇:AVL 树与 SB 树:不同维度的平衡探索 (对比项)
  • Redis源码阅读(一)跳表
  • P2196 [NOIP 1996 提高组] 挖地雷
  • Dify 安装 使用
  • 算法笔记.分解质因数
  • pytorch自然语言处理(NLP)
  • 一些读入时需要用到getchar()的时机
  • 微服务中组件扫描(ComponentScan)的工作原理
  • 序列数据(Sequential Data)​​:按顺序排列的动态信息载体
  • 深入拆解 MinerU 解析处理流程
  • 如何在linux服务器下载gitee上的模型
  • 【点对点协议(PPP)全解析】从原理到工程实践
  • JSON与字典的区别及示例
  • 数据结构6 · BinaryTree二叉树模板
  • 行业分析---速览2025上海车展
  • ESP-ADF esp_dispatcher组件之audio_service子模块回调管理函数详解
  • linux下如何在一个录目中将一个文件复制到另一个录目,删除目录
  • 【数据结构】堆的完整实现
  • Unity Text打字机效果,支持富文本
  • (11)Vue-Router路由的详细使用