From looking over here and other websites I know there are two common ways to convert a numeric char
value like '5'
to an int
value:
Using Character.getNumericValue()
Subtracting the number with the ASCII value for '0'
; i.e. int number = num - '0'
, where num
is a char
value.
Which of these two approaches is the fastest and most efficient?
The two versions are not equivalent:
Character.getNumericalValue(...)
methods work for a variety of characters that represent digits or numbers, and it will return -1
or -2
in cases where the character doesn't represent a non-negative integer.num - '0'
approach only gives the correct answer for the codepoints that correspond to the ASCII characters '0'
through '9'
. For all other codepoints or codeunits, it gives a meaningless value.The num - '0'
version will be faster. This is clear from looking at the source code for getNumericalValue(...)
.
While the difference is significant in relative terms, it is very small in absolute terms.
I concur with the comments that say that this is most likely a premature optimization.
It is also an incorrect optimization in some contexts.
I use it a lot so was wondering if I was using the most efficient one.
This is definitely premature optimization :-)
The number of times you write a particular code sequence is unrelated to performance of the code sequence when is executed. A section of code is only worth optimizing if the time spent executing it makes a significant difference to your entire application.