zoukankan      html  css  js  c++  java
  • 深入分析Java中的 == 和equals

    关于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,栈顶的实例的引用出栈,存储在局部变量表中,以便后续访问(两个引用刚好用完了),局部变量表中存储的就是引用变量的值。

    如果将代码写成这样的形式:

    1 public static void main(String[] args) {
    2         Human man;//声明一个引用变量
    3         man = new Man();
    4 }

    反汇编后得到的字节码与上面的相同。但是如果只声明变量,不复制,也就是将man = new Man();注释掉,发现反汇编后,局部变量表没有对应的man引用变量。

  • 相关阅读:
    Python操作Mongo数据库
    Python正则模块
    Python时间模块
    Python协程(下)
    Python协程(中)
    Python协程(上)
    aiohttp
    常用排序算法的Python实现
    江苏省各地级市58同城租房数据
    百合网
  • 原文地址:https://www.cnblogs.com/gulingjingguai/p/8178194.html
Copyright © 2011-2022 走看看