【发布时间】:2018-08-17 08:29:57
【问题描述】:
这是一个关于性能的问题。我可以使用以下代码从大写转换为小写,反之亦然:
从小写到大写:
// Uppercase letters.
class UpperCase {
public static void main(String args[]) {
char ch;
for (int i = 0; i < 10; i++) {
ch = (char) ('a' + i);
System.out.print(ch);
// This statement turns off the 6th bit.
ch = (char) ((int) ch & 65503); // ch is now uppercase
System.out.print(ch + " ");
}
}
}
从大写到小写:
// Lowercase letters.
class LowerCase {
public static void main(String args[]) {
char ch;
for (int i = 0; i < 10; i++) {
ch = (char) ('A' + i);
System.out.print(ch);
ch = (char) ((int) ch | 32); // ch is now lowercase
System.out.print(ch + " ");
}
}
}
我知道Java提供了以下方法:.toUpperCase( )和.toLowerCase( )。考虑到性能,最快的转换方法是什么,使用我在上面代码中展示的按位运算,或者使用.toUpperCase( ) 和.toLowerCase( ) 方法?谢谢。
编辑 1:请注意我如何使用十进制 65503,它是二进制 1111111111011111。我使用的是 16 位,而不是 8 位。根据目前在How many bits or bytes are there in a character? 获得更多投票的答案:
UTF-16 编码中的 Unicode 字符介于 16(2 个字节)和 32 位(4 个字节)之间,但大多数常见字符占用 16 位。这是 Windows 内部使用的编码。
我的问题中的代码假定为 UTF-16。
【问题讨论】:
-
为什么要关心大小写转换这种无关紧要的事情?
-
如果那时还没有,我将在几个小时内使用 JMH 进行基准测试。我怀疑按位运算符的性能会更好,因为
Character#toLowerCase和Character#toUpperCase都对参数执行大量检查。 -
无论你有什么应该都比
toUpperCase()/toLowerCase()快 -
@JaimeMontoya 但你不能证明微优化是合理的。你在浪费时间做一些无关紧要的事情。或者您是否真的通过分析您的软件将案例转换确定为性能热点?
-
@JacobG。我怀疑按位运算符更快,但我想确定。
标签: java performance ascii uppercase lowercase