char配列 -> String は byte配列 -> String より4倍くらい速い

いちいちchar[]にコピーする手間を入れても、エンコードに掛かる手間のほうが断然重いらしい。計測順の入れ替えを行っているのは、順序によって若干結果が異なるのを平準化するため。試したJVMは6u7, CPUはCore2Duo E8400(3.0GHz)。
といってもn〜μ秒の世界なので、相当なHotSpot中じゃないと意味ないかもしれない。加えて入力が0x00〜0x7Fじゃないと意味がない(と思う)。

	public void testByteCharString() throws Exception {
		byte[] bytes = new byte[]{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
		char[] chars = new char[bytes.length];
		double sum = 0;
		for (int i=0; i<1000; i++) {
			if (i % 2 == 0) {
				long s1 = System.nanoTime();
				new String(bytes, 0, 10);
				long r1 = System.nanoTime() - s1;
				
				long s3 = System.nanoTime();
				for (int j=0; j<10; j++) { chars[j] = (char)bytes[j]; }
				new String(chars, 0, 10);
				long r3 = System.nanoTime() - s3;

				sum += (double)r3 / r1;
			} else {
				long s3 = System.nanoTime();
				for (int j=0; j<10; j++) { chars[j] = (char)bytes[j]; }
				new String(chars, 0, 10);
				long r3 = System.nanoTime() - s3;
				
				long s1 = System.nanoTime();
				new String(bytes, 0, 10);
				long r1 = System.nanoTime() - s1;
				
				sum += (double)r3 / r1;
			}	
		}

		System.out.println("testByteCharString : " + (sum / 1000));
	}

結果

testByteCharString : 0.23410195329505473