深入分析Java中的 == 和equals
2024-08-30 16:44:36
关于Java中的 == 和equals的解释请看这位博主的文章 :http://www.cnblogs.com/dolphin0520/p/3592500.html
以下是我对这篇文章的一些扩展。
对创建实例过程的理解:
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman(); }
这是这段代码的部分截图:
由图可知,Human man = new Man()这条语句对应的四个指令为
1.new,创建一个Man类型的对象(Man为StaticDispath的静态内部类),并对对象进行默认初始化,并将该对象的引用压入栈顶;
2.dup,复制栈顶数值并将复制值压入栈顶(也就是说,栈顶有两个该实例的引用)
3.invokespecial,调用实例的构造器方法,这个过程会将栈顶的实例的this引用,传给构造器方法(栈顶的实例的引用消耗了一个)
4.astore_1,栈顶的实例的引用出栈,存储在局部变量表中,以便后续访问(两个引用刚好用完了),局部变量表中存储的就是引用变量的值。
如果将代码写成这样的形式:
public static void main(String[] args) {
Human man;//声明一个引用变量
man = new Man();
}
反汇编后得到的字节码与上面的相同。但是如果只声明变量,不复制,也就是将man = new Man();注释掉,发现反汇编后,局部变量表没有对应的man引用变量。
最新文章
- PHP工作笔记:yii2各种功能汇总
- 斯坦福第十四课:降维(Dimensionality Reduction)
- CSS3 动画animation
- Insert select 带选择复制一张表到另一张表
- empty()函数经典详解
- python 编码问题(二)
- asp.net Twilio
- List 三种遍历的方法
- 检测到有潜在危险的Request.Form值
- MySql数据库1【概念】
- 原生AJAX基础讲解及兼容处理
- CSS浮动专题!
- usaco 2002 月赛 Fiber Communications 题解
- android开发文章收藏
- spring-mvc 集成 activeMq 常见问题 + 解决方案 (仅供参考)
- 《javascript设计模式与开发实践》阅读笔记(13)—— 职责链模式
- windows10 conda python多版本切换
- C 标准库头文件
- SQL循环语句 详解
- java NIO入门【原】
热门文章
- 效能检测 psp
- 【转】nodeJs学习之项目结构
- 中国剩余定理---FZU 1402 猪的安家
- DP---基本思想 具体实现 经典题目 POJ1160 POJ1037
- 如何解决Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]
- TCP系列42—拥塞控制—5、Linux中的慢启动和拥塞避免(二)
- CA如何吊销签署过的证书
- ";数学口袋精灵";bug
- phpcms前端模板目录与文件结构分析图【templates】
- 增加响应header让ajax支持跨域