Оболочки*
Вам нужно просто прочитать его. Команды выполнять не требуется.
В java только восемь примитивных типов не реализованы
с помощью классов. Они оставлены в Java потому что арифметические
действия удобнее и быстрее производить с обычными числами, а не с объектами классов.
Но и для этих типов в языке Java есть соответствующие классы-оболочки (wrappers). Конечно, они
предназначены не для быстрых вычислений, а для действий, типичных при работе с
классами - создания объектов,
преобразования объектов, получения численных значений в разных формах и передачи объектов в методы
по ссылке.

Для каждого примитивного типа есть соответствующий класс. Числовые классы имеют общего
предка - абстрактный класс Number, в котором описаны шесть методов, возвращающих числовое
значение, содержащееся в классе, приведенное к соответствующему примитивному типу: bytevalue(),
doubievalue(), floatValue(), intValue(), longValue(), shortValue().
Эти методы переопределены
в каждом из шести числовых классов-оболочек.
Помимо метода сравнения объектов equals(), объявленного в классе Object, все описанные в этой
главе классы, кроме Boolean и Class, имеют метод compareTo(), сравнивающий числовое значение,
содержащееся в данном объекте, с числовым значением объекта - аргумента метода compareTo().
В результате работы метода получается целое значение:
- 0, если значения равны;
- отрицательное число (-1), если числовое значение в данном объекте меньше, чем в объекте-аргументе;
- положительное число (+1), если числовое значение в данном объекте больше числового значения, содержащегося в аргументе.
Числовые классы-оболочки
В каждом из шести числовых классов-оболочек есть статические методы преобразования строки,
содержащей число, в соответствующий примитивный тип: Byte.parseByte(), Double.parseDouble(),
Float.parseFloat(), Integer.parselnt(), Long.parseLong(), Short.parseShort().
Эти методы полезны при вводе данных в поля ввода, обработке параметров командной строки,
т. е. всюду, где числа представляются строками цифр со знаками плюс или минус и десятичной точкой.
В каждом из этих классов есть статические константы MAX_VALUE и MIN_VALUE, показывающие диапазон
числовых значений соответствующих примитивных типов. В классах Double и Float есть еще константы
POSITIVE_INFINITY, NEGATIVE_INFINITY, NaN, которые соответствуют плюс бесконечности, минус
бесконечности и NaN(Not a number), а также и логические методы проверки isNan(), isInfinite().
Статическими методами toBinaryString(), toHexString() и toOctalString() классов Integer и `Long
можно преобразовать целые значения типов int и long, заданные как аргумент метода, в строку символов,
показывающую двоичное, шестнадцатеричное или восьмеричное представление числа.
Пример использования:
public class Main {
public static void main(String[] args) {
int i = 0;
short sh = 0;
double d = 0;
Integer kl = 55;
Integer k2 = 100;
Double dl = 3.14;
try {
i = Integer.parseInt(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.out.println("sh - " + sh);
System.out.println("d. = " + d);
System.out.println("kl.intValue() = " + kl.intValue());
System.out.println("dl.intValue() = " + dl.intValue());
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.isInfinite(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));
}
}
На консоль будет выведено:
i = 0
sh - 0
d. = 0.0
kl.intValue() = 55
dl.intValue() = 3
kl > k2? -1
x = Infinity
x isNaN? false
x islnfinite? true
x == Infinity? true
d = 0
i = 0
i = 0
i = 0
Методы parseInt(), parseDouble() и т.д., а также конструкторы классов от строкового аргумента
требуют обработки исключений, поэтому в листинг вставлен блок try{} catch(){}. Пока что о них
говорить не будем, просто нужно запомнить, какие строки нужно добавить до вызова метода и после.
Класс Boolean
Это очень небольшой класс, предназначенный главным образом для того, чтобы передавать логические
значения в методы по ссылке.
Конструктор Boolean (String s)`` создает объект, содержащий значение true`, если строка s равна
"true"
в любом сочетании регистров букв, и значение false - для любой другой строки.
Логический метод booleanValue() возвращает логическое значение, хранящееся в объекте.
Класс Character
В этом классе собраны статические константы и методы для работы с отдельными символами.
Статический метод digit(char ch, in radix)`` переводит цифру chсистемы счисления с основаниемradix в ее числовое значение типаint.
Статический метод forDigit(int digit, int radix)производит обратное преобразование целого числаdigitв соответствующую цифру (тип char) в системе счисления с основаниемradix.
Основание системы счисления должно находиться в диапазоне от Character.MIN_RADIXдо
Character.MAX_RADIX`.
Статические методы toLowerCase(), `toUppercase()`` – переводят символ в нижний и верхний регистр
соответственно.
Множество статических логических методов проверяют различные характеристики символа, переданного в качестве аргумента метода:
isDigit() - проверяет, является ли символ цифрой;
isLetter() - проверяет, является ли символ буквой;
isLetterOrDigit() - Проверяет, является ли символ буквой или цифрой;
isLowerCase() - определяет, записан ли символ в нижнем регистре;
isUpperCase() - проверяет, записан ли символ в верхнем регистре;
public class Main {
public static void main(String[] args) {
Character c1 = '9';
System.out.println("cl.charValue() = " + c1.charValue());
System.out.println("number of 'A' = " + Character.digit('A', 16));
System.out.println("digit for 12 = " + Character.forDigit(12, 16));
System.out.println("cl = " + c1.toString());
System.out.println("ch isDigit? " + Character.isDigit(c1));
}
}
На консоль будет выведено:
cl.charValue() = 9
number of 'A' = 10
digit for 12 = c
cl = 9
ch isDigit? True
Классы BigInteger, BigDecimal
Все примитивные целые типы имеют ограниченный диапазон значений. Для того чтобы было можно производить
целочисленные вычисления любого размера, в java есть два класса: BigInteger и BigDecimal. Эти
классы расширяют класс Number, следовательно, в нем переопределены методы doubleValue(),
floatValue(), intValue(), longValue(). Методы byteValue() и shortValue() не переопределены,
а прямо наследуются от класса Number.
Действия с объектами классов BigInteger и BigDecimal не приводят ни к переполнению. Если
результат операции велик, то число разрядов просто увеличивается. Числа хранятся в двоичной форме
с дополнительным кодом.
Перед выполнением операции числа выравниваются по длине распространением знакового разряда.
Две константы - ZERO и ONE - содержат ноль и единицу.
Метод toByteArray() преобразует объект в массив байтов.
Эти классы соответствуют неизменяемым(immutable) объектам, как строки. Поэтому все операции
создают новые объекты, не изменяя тот, от которого они были вызваны.
abs()- возвращает объект, содержащий абсолютное значение числа, хранящегося в данном объекте this;add(x)- операция this + х;and(x)- операция this & х;andNot(x)- операция this & (~х) ;divide (x)- операция this / х;divideAndRemainder(х)- возвращает массив из двух объектов классаBiglnteger, содержащих частное и остаток от деления this на х;gcd(x)- наибольший общий делитель, абсолютных, значений объекта this и аргумента х;mах(х)- наибольшее из значений объекта this и аргумента х; min(x) - наименьшее из значений объекта this и аргумента х; mod(x) - остаток от деления объекта this на аргумент метода х;modinverse(x)- остаток от деления числа, обратного объекту this, на аргумент х;multiply(х)- операция this * х;negate()- перемена знака числа, хранящегося в объекте;not()- операция ~this;оr(х)- операция this | х;pow(n)- операция возведения числа, хранящегося в объекте, в степень n;remainder(х)- операция this % х;shiftLeft(n)- операция this « n ;shiftRight(n)- операция this » n;signum()- функция sign (x);subtract(x)- операция this - x;xor(x)- операция this ^ x.
Пример использования:
public class Main {
public static void main(String[] args) {
BigInteger a = new BigInteger("99999999999999999");
BigInteger b = new BigInteger("88888888888888888888");
System.out.println("bits in a = " + a.bitLength());
System.out.println("bits in b = " + b.bitLength());
System.out.println("a + b = " + a.add(b));
System.out.println("a & b = " + a.and(b));
System.out.println("a & ~b = " + a.andNot(b));
System.out.println("a / b = " + a.divide(b));
BigInteger[] r = a.divideAndRemainder(b);
System.out.println("a / b: q = " + r[0] + ", r = " + r[1]);
System.out.println("gcd(a, b) = " + a.gcd(b));
System.out.println("max(a, b) = " + a.max(b));
System.out.println("min(a, b) = " + a.min(b));
System.out.println("a mod b = " + a.mod(b));
System.out.println("a * b = " + a.multiply(b));
System.out.println("-a = " + a.negate());
System.out.println("~a = " + a.not());
System.out.println("a | b = " + a.or(b));
System.out.println("а ^ 3 = " + a.pow(3));
System.out.println("a % b = " + a.remainder(b));
System.out.println("a « 3 = " + a.shiftLeft(3));
System.out.println("a » 3 = " + a.shiftRight(3));
System.out.println("sign(a) = " + a.signum());
System.out.println("a - b = " + a.subtract(b));
System.out.println("а xor b = " + a.xor(b));
}
}
На консоль будет выведено:
bits in a = 57
bits in b = 67
a + b = 88988888888888888887
a & b = 72133975954525752
a & ~b = 27866024045474247
a / b = 0
a / b: q = 0, r = 99999999999999999
gcd(a, b) = 1
max(a, b) = 88888888888888888888
min(a, b) = 99999999999999999
a mod b = 99999999999999999
va * b = 8888888888888888799911111111111111112
-a = -99999999999999999
~a = -100000000000000000
a | b = 88916754912934363135
а ^ 3 = 999999999999999970000000000000000299999999999999999
a % b = 99999999999999999
a « 3 = 799999999999999992
a » 3 = 12499999999999999
sign(a) = 1
a - b = -88788888888888888889
а xor b = 88844620936979837383