<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [Java]String中“+”的實現原理及效率

      在Java中String的操作很多時候都與連接符"+"有關,比如我們可以用String = int + "" 將一個int整數或是其他基本類型轉為String類型,也可以用String = String + String 連接兩個字符串。那么這些連接符具體是如何實現的呢?他們的效率又如何呢?

      首先我們可以在API文檔上查閱到:

      Java 語言提供對字符串串聯符號("+")以及將其他對象轉換為字符串的特殊支持。字符串串聯是通過 StringBuilder(或 StringBuffer)類及其 append 方法實現的。字符串轉換是通過 toString 方法實現的,該方法由 Object 類定義,并可被 Java 中的所有類繼承。有關字符串串聯和轉換的更多信息,請參閱 Gosling、Joy 和 Steele 合著的 The Java Language Specification。
      到底是否如上所說呢?決定用反編譯驗證一下,代碼如下:
      public class Test {
      public static void main(String[] args) {
      int i = 10;
      String s = "abc";
      System.out.println(s + i);
      }
      }
      反編譯后代碼變為:
      public class Test {
      public static void main(String args[]) { //刪除了默認構造函數和字節碼
      byte byte0 = 10;
      String s = "abc";
      System.out.println((new StringBuilder()).append(s).append(byte0).toString());
      }
      }
      這樣我們就能很清晰的看到,原來Java中"+"連接字符串對象時,會創建一個StringBuilder()對象并調用append()方法將數據拼接,最后調用toString()方法返回拼接好的字符串,由于append()方法的各種重載形式會調用String.valueOf方法,所以我們可以認為:
      //以下兩者是等價的
      s = i + ""
      s = String.valueOf(i);

      //以下兩者也是等價的
      s = "abc" + i;
      s = new StringBuilder("abc").append(i).toString();
      這種JVM隱式創建StringBuilder的方式在大部分情況下并不會造成效率的損失,不過在進行大量循環拼接字符串時則需要注意,例如源代碼為:
      </pre><pre name="code" class="java">public class Test {
      public static void main(String[] args) {
      String s = "abc";
      for (int i=0; i<10000; i++) {
      s += "abc";
      }
      }
      }
      反編譯后代碼為:
      public class Test {
      public static void main(String args[]) {
      String s = "abc";
      for(int i = 0; i < 1000; i++) {
      s = (new StringBuilder()).append(s).append("abc").toString();
      }
      }
      }
      這樣由于大量StringBuilder創建在堆內存中,肯定會造成效率的損失,所以在這種情況下建議在循環體外創建一個StringBuilder對象調用append()方法手動拼接(如上面例子如果使用手動拼接運行時間將縮小到1/200左右)。與此之外還有一種特殊情況,也就是當"+"兩端均為字符串常量(此時指的是"abc"等而不是final修飾的String對象)時,在編譯過后會直接拼接好,例如:
      public class Test {
      public static void main(String[] args) {
      System.out.println("Hello" + "World");
      }
      }
      反編譯后變為:
      public class Test {
      public static void main(String args[]) {
      System.out.println("HelloWorld");
      }
      }
      這樣的情況效率肯定是最佳的,不過一般不會有人會用"+"拼接兩個字符串常量吧。
      最后結論:在大部分情況下,使用"+"連接字符串并不會造成效率上的損失,同時可以提高程序的易讀性和簡潔度,不會擔心盡管使用便是!

      ————————————————
      版權聲明:本文為CSDN博主「ScienJus」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
      原文鏈接:https://blog.csdn.net/sinat_19425927/article/details/38663461

      posted @ 2022-06-16 00:28  明月鎮魂  閱讀(1101)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中文字幕有码日韩精品| 国产一精品一av一免费| 免费无码又爽又刺激成人| 亚洲AV永久无码一区| 亚洲av鲁丝一区二区三区黄| 精品久久久久中文字幕日本| 亚洲大尺度无码专区尤物| 丁香婷婷综合激情五月色| 国产最大成人亚洲精品| 亚州av第二区国产精品| 亚洲国产一区二区三区久| 91中文字幕在线一区| 亚洲人成人伊人成综合网无码| 欧美白人最猛性xxxxx| 亚洲人成网线在线播放VA| 精品人妻伦一二三区久久aaa片| 亚洲国产精品自在拍在线播放蜜臀 | 日本一卡2卡3卡4卡无卡免费| 日韩精品一区二区三区四| 亚洲欧美另类久久久精品播放的 | 人人妻人人狠人人爽天天综合网| 亚洲a∨无码无在线观看| 四虎成人在线观看免费| 娇小萝被两个黑人用半米长| 国产精品粉嫩嫩在线观看| 精品中文字幕人妻一二| 免费一区二区无码东京热| 亚洲日本韩国欧美云霸高清| 亚洲综合一区国产精品| 人人妻一区二区三区| 99国产精品一区二区蜜臀| 国产网友愉拍精品视频手机 | 国产午夜精品无码一区二区 | 亚洲精品不卡无码福利在线观看 | 欧美成人精品在线| 61精品人妻一区二区三区| 无码一区二区三区久久精品| 色综合AV综合无码综合网站| 激情综合色综合久久综合| 亚洲av影院一区二区三区| 暖暖影院日本高清...免费|