Java基础知识-操作符重载

2017-09-07  本文已影响0人  liyang_hawk

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不支持操作符重载

上一篇下一篇

猜你喜欢

热点阅读