zoukankan      html  css  js  c++  java
  • Java 基础

    总结

    javap是jdk自带的反解析工具。它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。

    javap的用法格式:

    javap <options> <classes>
    

    其中classes就是你要反编译的class文件。 在命令行中直接输入javap或javap -help可以看到javap的options有如下选项:

    -help  --help  -?        输出此用法消息
     -version                 版本信息,其实是当前javap所在jdk的版本信息,不是class在哪个jdk下生成的。
     -v  -verbose             输出附加信息(包括行号、本地变量表,反汇编等详细信息)
     -l                         输出行号和本地变量表
     -public                    仅显示公共类和成员
     -protected               显示受保护的/公共类和成员
     -package                 显示程序包/受保护的/公共类 和成员 (默认)
     -p  -private             显示所有类和成员
     -c                       对代码进行反汇编
     -s                       输出内部类型签名
     -sysinfo                 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)
     -constants               显示静态最终常量
     -classpath <path>        指定查找用户类文件的位置
     -bootclasspath <path>    覆盖引导类文件的位置
    

    一般常用的是-v -l -c三个选项:

    • javap -v classxx,不仅会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息。
    • javap -l 会输出行号和本地变量表信息。
    • javap -c 会对当前class字节码进行反编译生成汇编代码。

    详细解析请看: 通过javap命令分析java汇编指令

    javap 分析装箱拆箱

    关于equals比较

    double i0 = 0.1;
    Double i1 = new Double(0.1);
    Double i2 = new Double(0.1);
    System.out.println(i1.equals(i2)); //true 2个包装类比较,比较的是包装的基本数据类型的值
    
    //javap 分析这句话
    System.out.println(i1.equals(i0)); //true 基本数据类型和包装类型比较时,会先把基本数据类型包装后再比较
    

    基本数据类型和包装类比较时,会先把基本数据类型包装成对应的包装类型,再进行比较。这一点可以通过查看.class字节码来证明:

    关于 == 比较

    对于基本数据类型,==(双等号)比较的是值,而对于包装类型,==(双等号)比较的则是2个对象的内存地址。

    double i0 = 0.1;
    Double i1 = new Double(0.1);
    Double i2 = new Double(0.1);
    System.out.println(i1 == i2);    //false new出来的都是新的对象
    
    //javap 分析这句话
    System.out.println(i1 == i0);    //true 基本数据类型和包装类比较,会先把包装类拆箱
    

    基本数据类型和包装类型比较时,会先把包装类拆箱再进行值比较(和equals是反的)。这个也可以通过查看字节码来证明:

  • 相关阅读:
    Solr4.8.0源码分析(12)之Lucene的索引文件(5)
    JAVA基础(1)之hashCode()
    Solr4.8.0源码分析(11)之Lucene的索引文件(4)
    检查数据不一致脚本
    索引的新理解
    数据库放到容器里
    动态规划
    每天晚上一个动态规划
    postgresql parallel join example
    名不正,则言不顺
  • 原文地址:https://www.cnblogs.com/frankcui/p/12134360.html
Copyright © 2011-2022 走看看