簡體   English   中英

String.lastIndexOf()char和具有單個字符的字符串之間有區別嗎?

[英]String.lastIndexOf() is there a difference between a char and a string with a single character?

只是想知道是否有人知道如果在執行以下操作方面存在很大差異,那么他們是否知道他們的頭腦:

String wibble = "<blah> blah blah </blah>.... <wibble> blah wibble blah </wibble> some more test here";

int i = wibble.lastIndexOf(">");
int j = wibble.lastIndexOf('>');

意見很好,但數據更好。 我寫了一個快速基准:

測試代碼

public static void main(String[] args)
{
  System.out.println("Starting perfo test");

  final long NUM_TESTS = 100000000L;

  String wibble = "<blah> blah blah </blah>.... <wibble>"
                + " blah wibble blah </wibble> some more test here";
  int x = -1;
  Stopwatch sw = new Stopwatch();

  System.out.println("--perfo test with " + NUM_TESTS + " iterations--");

  sw.start();
  for(long i = 0; i < NUM_TESTS; i++)
    x = wibble.lastIndexOf(">");
  sw.stop();
  System.out.println("String first pass: " + sw + " seconds");

  sw.start();
  for(long i = 0; i < NUM_TESTS; i++)
    x = wibble.lastIndexOf('>');
  sw.stop();
  System.out.println("Char first pass: " + sw + " seconds");

  sw.start();
  for(long i = 0; i < NUM_TESTS; i++)
    x = wibble.lastIndexOf('>');
  sw.stop();
  System.out.println("Char second pass: " + sw + " seconds");

  sw.start();
  for(long i = 0; i < NUM_TESTS; i++)
    x = wibble.lastIndexOf(">");
  sw.stop();
  System.out.println("String second pass: " + sw + " seconds");

  //Compiler warning said x was never read locally.. this is to
  //ensure the compiler doesn't optimize "x" away..
  System.out.println(x); 
}

產量

Starting perfo test
--perfo test with 100000000 iterations--
String first pass: 8.750 seconds
Char first pass: 6.500 seconds
Char second pass: 6.437 seconds
String second pass: 8.610 seconds
63

結論

帶有char的版本速度提高了大約25%,但兩個版本的執行速度都非常快,因此它可能永遠不會成為代碼中的瓶頸。

您實際上可以查看String類的源代碼。 似乎lastIndex(char)和lastIndex(String)實際上是分開編寫的。 String類也應該有開銷。 所以char版本可能會快一點,但我懷疑是否會出現任何顯着的性能差異。

http://www.docjar.com/html/api/java/lang/String.java.html

在性能方面,可能會略有不同。 對於搜索單個字符,使用char而不是String更快或更等。

如果可讀性沒有差異(如本例所示),最好選擇僅搜索char的版本。 lastIndexOf的工作量較少 - 在列表中查找單個元素比查找列表更容易(這實際上是搜索字符串的行為)。

一個字符串有額外的開銷,無論它的長度是多少都需要(除非你有一個真正的智能編譯器,無論如何都會將單個字符串文字優化為字符常量:)),所以如果你只搜索單個字符串,你應該更喜歡char版本字符。 這不是一個邪惡的優化,因為它在任何一種方式都是可讀的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM