Pep*_*val 6 java char data-conversion
从这里望过去和其他网站我知道有转换数字两种常用的方法char类似值'5'一个int值:
使用 Character.getNumericValue()
用ASCII值减去数字'0';即int number = num - '0',在这里num是一个char值。
这两种方法中哪一种是最快,最有效的?
这两个版本不相等:
Character.getNumericalValue(...)方法适用于表示数字或数字的各种字符,并且将返回-1或-2在字符不表示非负整数的情况下返回。num - '0'方法只给出了对应的ASCII字符码点的正确答案'0'通过'9'。对于所有其他代码点或代码单元,它给出了无意义的值。该num - '0'版本将更快。通过查看的源代码可以清楚地看出这一点getNumericalValue(...)。
尽管相对而言差异显着,但绝对差异很小。
我同意这样的说法:这很可能是过早的优化。
在某些情况下,这也是不正确的优化。
我经常使用它,所以想知道我是否使用了最高效的工具。
绝对是过早的优化:-)
您编写特定代码序列的次数与该代码序列的执行次数无关。后者决定了优化是否值得付出努力。
好吧,Character.getNumericValue()考虑到Unicode,radix,case,文化:
'0' -> 0 // Same as number - '0'
'9' -> 9 // Same as number - '0'
'A' -> 10 // Hexadecimal 0xA == 10
'f' -> 15 // Hexadecimal 0xF == 15
'³' -> 3 // Unicode superscript 3
'?'-> 20 // Unicode enclosed alphanumeric 20
'?' -> 5 // Persian digit 5
'*' -> -1 // Doesn't have any corresponding integer value
'?' -> -2 // Even if 5/6 fraction Unicode character is a number, it's not integer
Run Code Online (Sandbox Code Playgroud)
而
number - '0'
Run Code Online (Sandbox Code Playgroud)
只是两个int秒的减法。这就是为什么Character.getNumericValue()不可避免地要慢一些(为什么要优化几纳秒?)。但是,请注意,在'A', 'f', '³', '*'等情况下,你将不得不错asnwers与number - '0'代码。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |