我写了一个小测试,看看,而不是猜测:
import java.util.Arrays;
import java.util.Random;
public class StringComparisons {
static String[] strings = new String[10000];
static byte[][] bytes = new byte[10000][];
public static void main(String[] args) {
Random r = new Random();
System.out.println("Generating strings/byte arrays");
for (int i = 0; i < strings.length; i++) {
StringBuilder s = new StringBuilder();
for (int j = 0; j < 1000; j++) {
s.append(r.nextInt(128) + 1);
}
strings[i] = s.toString();
bytes[i] = strings[i].getBytes();
}
final String comparend = strings[r.nextInt(strings.length)];
final byte[] byteComparend = comparend.getBytes();
System.out.println("Comparing strings...");
long start = System.nanoTime();
for (int i = 0; i < strings.length; i++) {
comparend.equals(strings[i]);
}
long elapsed = System.nanoTime() - start;
System.out.printf("Comparing strings took %f s\n", (elapsed/1000000000.0));
System.out.println("Comparing byte arrays");
start = System.nanoTime();
for (int i = 0; i < bytes.length; i++) {
Arrays.equals(byteComparend, bytes[i]);
}
elapsed = System.nanoTime() - start;
System.out.printf("Comparing bytes took %f s\n", (elapsed/1000000000.0));
}
}
看来字符串比较快几个数量级。
我的机器上的例子的输出是:
Generating strings/byte arrays
Comparing strings...
Comparing strings took 0.000010 s
Comparing byte arrays
Comparing bytes took 0.001339 s
如果没有记错,字符串和一个字节数组是两个独立的东西,字符是UCS-2或UTF-16或东西。如果是这样,你问烤面包机是否比食品加工者快。 – 2011-12-22 22:11:40
@在我看来,你的比喻有点偏离。 Java'char'没有什么特别之处。他们只是无符号的16位整数,没有什么更多,没有什么。 – corsiKa 2011-12-22 22:14:14
它们仍然不同于字节。 – EJP 2011-12-23 03:13:05