• 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"
    
    
  • 相关阅读:
    Memcached笔记——(三)Memcached使用总结
    Memcached笔记——(二)XMemcached&Spring集成
    Memcached笔记——(一)安装&常规错误&监控
    【开源专访】Fourinone创始人彭渊:打造多合一的分布式并行计算框架
    memcached&redis性能测试
    Memcached哈希性能优化(八)——总结报告
    Memcached客户端性能评测报告
    利用websocket实现android消息推送
    Web 通信 之 长连接、长轮询(long polling)
    一个IP能建立的最大连接数是多少?
  • 原文地址:https://www.cnblogs.com/lger/p/9282707.html
Copyright © 2020-2023  润新知