Java基礎(chǔ)知識-操作符重載

java操作符重載

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

對于java的String對象+運算,大學(xué)老師的解釋一直是操作符重載,也就默認了,突然有興趣自己摸索一下。

找到對應(yīng)的class文件,運行javap -c *.class

函數(shù)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

可以看到編譯后的代碼實際創(chuàng)建了StringBuilder,而+操作符也被轉(zhuǎn)成了StringBuilder的append,所以一種說法是java實際并不是把操作符重載了(ps:因為其它操作符沒有類似的操作),而是操作符的語法糖而已。

參考文獻
javap
為什么Java不支持操作符重載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容