符号引用和直接引用 您所在的位置:网站首页 什么是符号引用和直接引用的区别 符号引用和直接引用

符号引用和直接引用

2024-07-03 12:29| 来源: 网络整理| 查看: 265

总结:JVM对于直接引用和符号引用的处理是有区别的,可以看到符号引用时,JVM将使用StringBuilder来完成字符串的  添加,而直接引用时则直接使用String来完成;直接引用永远比符号引用效率更快,但实际应用开发中不可能全用直接引用,要提高效能可以考虑按虚拟机的思维来编写你的程序。

1.0 直接引用:

public class StringAndStringBuilder{    public static void main(String[] args){            System.out.println ("s=" + "asdfa");    } }

反编译后的:

F:\java\res\字节码>javap -c StringAndStringBuilder Compiled from "StringAndStringBuilder.java" public class StringAndStringBuilder extends java.lang.Object{ public StringAndStringBuilder();   Code:    0:   aload_0    1:   invokespecial   #1; //Method java/lang/Object."":()V    4:   return

public static void main(java.lang.String[]);   Code:    0:   ldc     #2; //String asdfa    2:   astore_1    3:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;    6:   ldc     #4; //String s=asdfa    8:   invokevirtual   #5; //Method java/io/PrintStream.println:(Ljava/lang/Str ing;)V    11:  return

}

 

2.0 符号引用:

public class StringAndStringBuilder{    public static void main(String[] args){           String s="asdfa";         System.out.println ("s=" + s);    } }

反编译后的:

F:\java\res\字节码>javap -c StringAndStringBuilder Compiled from "StringAndStringBuilder.java" public class StringAndStringBuilder extends java.lang.Object{ public StringAndStringBuilder();   Code:    0:   aload_0    1:   invokespecial   #1; //Method java/lang/Object."":()V    4:   return

public static void main(java.lang.String[]);   Code:    0:   ldc     #2; //String asdfa    2:   astore_1    3:   getstatic       #3; //Field java/lang/System.out:Ljava/io/PrintStream;    6:   new     #4; //class java/lang/StringBuilder    9:   dup    10:  invokespecial   #5; //Method java/lang/StringBuilder."":()V    13:  ldc     #6; //String s=    15:  invokevirtual   #7; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder;    18:  aload_1    19:  invokevirtual   #7; //Method java/lang/StringBuilder.append:(Ljava/lang/ String;)Ljava/lang/StringBuilder;    22:  invokevirtual   #8; //Method java/lang/StringBuilder.toString:()Ljava/la ng/String;    25:  invokevirtual   #9; //Method java/io/PrintStream.println:(Ljava/lang/Str ing;)V    28:  return

}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有