美文网首页
Java基础知识-操作符重载

Java基础知识-操作符重载

作者: liyang_hawk | 来源:发表于2017-09-07 09:19 被阅读0次

    java操作符重载

      String str1 = "hello";
      String str2 = str1 + " world";
      System.out.println(str2);           
    

    对于java的String对象+运算,大学老师的解释一直是操作符重载,也就默认了,突然有兴趣自己摸索一下。

    找到对应的class文件,运行javap -c *.class

    函数main的主要代码如下:

      public static void main(java.lang.String[]);
        Code:
           0: ldc           #16                 // String hello
           2: astore_1
           3: new           #18                 // class java/lang/StringBuilder
           6: dup
           7: aload_1
           8: invokestatic  #20                 // Method java/lang/String.valueOf:(
    Ljava/lang/Object;)Ljava/lang/String;
          11: invokespecial #26                 // Method java/lang/StringBuilder."<
    init>":(Ljava/lang/String;)V
          14: ldc           #29                 // String  world
          16: invokevirtual #31                 // Method java/lang/StringBuilder.ap
    pend:(Ljava/lang/String;)Ljava/lang/StringBuilder;
          19: invokevirtual #35                 // Method java/lang/StringBuilder.to
    String:()Ljava/lang/String;
          22: astore_2
          23: getstatic     #39                 // Field java/lang/System.out:Ljava/
    io/PrintStream;
          26: aload_2
          27: invokevirtual #45                 // Method java/io/PrintStream.printl
    n:(Ljava/lang/String;)V
          30: return
    

    可以看到编译后的代码实际创建了StringBuilder,而+操作符也被转成了StringBuilder的append,所以一种说法是java实际并不是把操作符重载了(ps:因为其它操作符没有类似的操作),而是操作符的语法糖而已。

    参考文献
    javap
    为什么Java不支持操作符重载

    相关文章

      网友评论

          本文标题:Java基础知识-操作符重载

          本文链接:https://www.haomeiwen.com/subject/azkujxtx.html