• Java 初始化a=2 打印a+++a++为5


    这段程序大概这样:

    
    public static void main(String[] args){
    	int a = 2;
    	System.out.println(a+++a++);
    }
    
    

    编译后的字节码为:

    
    public static void main(java.lang.String[]);
      descriptor: ([Ljava/lang/String;)V
      flags: ACC_PUBLIC, ACC_STATIC
      Code:
        stack=3, locals=2, args_size=1
           0: iconst_2                      /*将int型2推送至栈顶*/
           1: istore_1                      /*将栈顶int型数值存入第二个本地变量,这里就是完成a=2的步骤*/
           2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;    /*获取指定类的静态域,并将其值压入栈顶*/ 
           5: iload_1                       /*将第二个int型本地变量推送至栈顶,现在栈顶的值为a的值 2 */
           6: iinc          1, 1            /*将指定int型变量增加指定值,现在a的值为3 */
           9: iload_1                       /*将第二个int型本地变量推送至栈顶,栈顶的值为 3 */
           10: iinc          1, 1           /*将指定int型变量增加指定值,现在a为4*/
           13: iadd                         /*将栈顶两int型数值相加并将结果压入栈顶,前面压入栈顶的值分别为2和3,所以现在栈顶的值为 5 */
           14: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
           17: return
         LineNumberTable:
           line 4: 0
           line 5: 2
           line 6: 17
    }
    SourceFile: "Test.java"
    
    

    现在,如果把程序换一下:

    
    public static void main(String[] args){
    	int a = 2;
    	System.out.println(a+++(++a));
    }
    
    

    现在字节码为:

    
      public static void main(java.lang.String[]);
        descriptor: ([Ljava/lang/String;)V
        flags: ACC_PUBLIC, ACC_STATIC
        Code:
          stack=3, locals=2, args_size=1
             0: iconst_2
             1: istore_1              /*完成a=2的赋值*/
             2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
             5: iload_1              /*a的值压入栈顶,为 2 */
             6: iinc          1, 1   /*a自增长 a=3*/
             9: iinc          1, 1   /*a自增长 a=4*/
            12: iload_1              /*a值压入栈顶,为 4*/ 
            13: iadd                 /*两值相加,为 6*/
            14: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
            17: return
          LineNumberTable:
            line 4: 0
            line 5: 2
            line 6: 17
    }
    SourceFile: "Test.java"
    
    
  • 相关阅读:
    Android:res之layer-list的用法
    Android:改变Activity切换方式
    Android:dimen尺寸资源文件的使用
    Android Studio安装、配置
    Android Studio 初探
    Android SDK开发包国内下载地址
    linux下centos安装android sdk最新全面教程【可行】
    CentOS 7.0安装Nvidia驱动
    javascript基础部分
    js api 实现钉钉免登
  • 原文地址:https://www.cnblogs.com/lger/p/9282707.html
Copyright © 2020-2023  润新知