Числовые классы
В каждом из шести числовых классов-оболочек есть статические методы преобразования строки символов типа
string
лредставляющей число, в соответствующий примитивный тип:
Byte.parseByte(), Double.parseDouble(), Float.parseFloat(), Integer.parselnt(), Long.parseLong(), Short.parseShort()
. Исходная строка типа
string
, как всегда в статических методах, задается как аргумент метода. Эти методы полезны при вводе данных в поля ввода, обработке параметров командной строки, т. е. всюду, где числа представляются строками цифр со знаками плюс или минус и десятичной точкой.
В каждом из этих классов есть статические константы
MAX_VALUE
и
MIN_VALUE
, показывающие диапазон числовых значений соответствующих примитивных типов. В классах
Double
и
Float
есть еще константы
POSITIVE_INFINITY, NEGATIVE_INFINITY, NaN
, о которых шла речь в
главе 1,
и логические методы проверки
isNan()
,
isInfinite()
.
Если вы хорошо знаете двоичное представление вещественных чисел, то можете воспользоваться статическими методами
floatTointBits()
и
doubieToLongBits()
, преобразующими вещественное значение в целое. Вещественное число задается как аргумент метода. Затем вы можете изменить отдельные биты побитными операциями и преобразовать измененное целое число обратно в вещественное значение методами
intsitsToFioat()
и
longBitsToDouble()
.
Статическими методами
toBinaryString(), toHexString() и
toOctalString()
классов
integer
и
Long
можно преобразовать целые значения типов
int
и
long
, заданные как аргумент метода, в строку символов, показывающую двоичное, шестнадцатеричное или восьмеричное представление числа.
В листинге 4.1 показано применение этих методов, а рис. 4.2 демонстрирует вывод результатов.
Рис. 4.2.
Методы числовых классов ;
Листинг 4.1.
Методы числовых классов
class NumberTest{
public static void main(String[] args){
int i = 0;
short sh = 0;
double d = 0;
Integer kl = new Integer(55);
Integer k2 = new Integer(100);
Double dl = new Double(3.14);
try{
i = Integer.parselnt(args[0]);
sh = Short.parseShort(args[0]);
d = Double.parseDouble(args[1]);
dl = new Double(args[1]);
kl = new Integer(args[0]);
}catch(Exception e){}
double x = 1.0/0.0;
System.out.println("i = " + i) ;
System.outjprintln("sh - " + sh) ;
System.out.println("d. = " + d) ;
System.out.println("kl.intValue() = " + kl.intValue());
System.out.println("dl.intValue() '= "'+ dl.intValuei));
System.out.println("kl > k2? " + kl.compareTo(k2));
System.out.println ("x = " + x);
System.out.println("x isNaN? " + Double.isNaN(x));
System.out.println("x islnfinite? " + Double.islnfinite(x));
System.out.println("x == Infinity? " +
(x == Double.POSITIVE_INFINITY) );
System.out.println("d = " + Double.doubleToLongBits(d));
System.out.println("i = " + Integer.toBinaryString(i));
System.out.println("i = " + Integer.toHexString(i));
System.out.println("i = " + Integer.toOctalString(i));
}
}
Методы
parseint()
и конструкторы классов требуют обработки исключений, поэтому в листинг 4.1 вставлен блок
try{} catch(){}
. Обработку исключительных ситуаций мы разберем в главе 16.