关于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引用变量。

最新文章

  1. PHP工作笔记:yii2各种功能汇总
  2. 斯坦福第十四课:降维(Dimensionality Reduction)
  3. CSS3 动画animation
  4. Insert select 带选择复制一张表到另一张表
  5. empty()函数经典详解
  6. python 编码问题(二)
  7. asp.net Twilio
  8. List 三种遍历的方法
  9. 检测到有潜在危险的Request.Form值
  10. MySql数据库1【概念】
  11. 原生AJAX基础讲解及兼容处理
  12. CSS浮动专题!
  13. usaco 2002 月赛 Fiber Communications 题解
  14. android开发文章收藏
  15. spring-mvc 集成 activeMq 常见问题 + 解决方案 (仅供参考)
  16. 《javascript设计模式与开发实践》阅读笔记(13)—— 职责链模式
  17. windows10 conda python多版本切换
  18. C 标准库头文件
  19. SQL循环语句 详解
  20. java NIO入门【原】

热门文章

  1. 效能检测 psp
  2. 【转】nodeJs学习之项目结构
  3. 中国剩余定理---FZU 1402 猪的安家
  4. DP---基本思想 具体实现 经典题目 POJ1160 POJ1037
  5. 如何解决Unsupported Architecture. Your executable contains unsupported architecture '[x86_64, i386]
  6. TCP系列42—拥塞控制—5、Linux中的慢启动和拥塞避免(二)
  7. CA如何吊销签署过的证书
  8. "数学口袋精灵"bug
  9. phpcms前端模板目录与文件结构分析图【templates】
  10. 增加响应header让ajax支持跨域