Ответ
В Float.valueOf("۱")
нет проверки для разных языков или символов, проверяются только цифры 0-9
. Integer.valueOf
использует Character.di git () , чтобы получить значение каждого di git в строке.
Исследование / Объяснение
Я отладил оператор Float.valueOf("۱")
с помощью отладчика Intellij. Если вы погрузитесь в FloatingDecimal. java, похоже, этот код определяет, какой символ следует считать как di git:
digitLoop:
while (i < len) {
c = in.charAt(i);
if (c >= '1' && c <= '9') {
digits[nDigits++] = c;
nTrailZero = 0;
} else if (c == '0') {
digits[nDigits++] = c;
nTrailZero++;
} else if (c == '.') {
if (decSeen) {
// already saw one ., this is the 2nd.
throw new NumberFormatException("multiple points");
}
decPt = i;
if (signSeen) {
decPt -= 1;
}
decSeen = true;
} else {
break digitLoop;
}
i++;
}
Как видите, проверки для разных языков нет, проверяет только цифры 0-9
.
При пошаговом выполнении Integer.valueOf
,
public static int parseInt(String s, int radix)
выполняется с s = "۱"
и radix = 10
.
Затем метод parseInt вызывает Character.digit('۱',10)
для получения значения di git 1
.
См. Character.di git ()