В Java отсутствует sizeof()
В С и С++ оператор sizeof() выдает количество байтов, выделенных для хране¬ния данных. Главная причина для использования sizeof() — переносимость про¬граммы. Различным типам данных может отводиться различное количество па¬мяти на разных компьютерах, поэтому для программиста важно определить размер этих типов перед проведением операций, зависящих от этих величин. Например, один компьютер выделяет под целые числа 32 бита, а другой — всего лишь 16 бит. В результате на первой машине программа может хранить в цело¬численном представлении числа из большего диапазона. Конечно, аппаратная совместимость создает немало хлодот для программистов на С и С++.
В Java оператор sizeof() не нужен, так как все типы данных имеют одинако¬вые размеры на всех машинах. Вам не нужно заботиться о переносимости на низком уровне — она встроена в язык.
Сводка операторов
Следующий пример показывает, какие примитивные типы данных используются с теми или иными операторами. Вообще-то это один и тот же пример, повторен¬ный много раз, но для разных типов данных. Файл должен компилироваться без ошибок, поскольку все строки, содержащие неверные операции, предварены символами //!.
// operators/AHOps java
// Проверяет все операторы со всеми
// примитивными типами данных, чтобы показать,
// какие операции допускаются компилятором Java
public class AT 1 Ops {
// для получения результатов тестов типа boolean: void f(boolean b) {} void boolTest(boolean x, boolean y) { // Арифметические операции- //' x = x * у; //! x = x / у;
//! х = х % у; III х = х + у; III х = х - у; III х++; //! х--; //! х = +у; //! х = -у;
// Операции сравнения и логические операции:
III f(х > у),
//! f(х >= у);
III f(х < у).
Ill f(х <= у);
f(x == у),
f(х != у);
f(!y);
х = х && у: х = х || у.
III х =
X = X =
II II II // // // // // // // // // X &= у: х А= у: х |= у.
// Приведение-
// Поразрядные операторы:
-у; & у.
у:
У:
х « 1; х » 1, х »> 1; Совмещенное присваивание: х += у: х у. *= У; /= у; := У. «= 1; »= 1. »>= 1;
II char с = (char)x,
II byte В = (byte)x:
II short s : = (short)x;
II int i = (int)x:
П long 1 = (long)x:
п float f ; = (float)x;
II double d = (double)x;
void charTest(char х, char у) {
х = х
х++, х- -,
X = X =
// Арифметические операции- х = (char)(x * у): х = (char)(x / у). х = (char)(x % у), (char)Сх + у), (char)(x - у),
(char)+y; (char)-y:
// Операции сравнения и логические операции:
f(x > у);
f(x >= у);
f(x < у);
f(x <= у);
f(x == у);
fCx != у);
//! f(!x);
//! f(x && у);
//! f(x || у).
// Поразрядные операции:
х= (charby;
х = (char)(x & у).
х = (char)(x | у):
х = (char)(x А у):
х = (char)(x « 1):
х = (char)(x » 1):
х = (char)(x »> 1):
// Совмещенное присваивание:
х += у,
х -= у:
х *= у;
х /= у:
х Х- у:
х «= 1.
X »= 1,
х »>= 1: х &= у; х А= у; х |= У.
// Приведение-
//! boolean b = (boolean)x:
byte В = (byte)x:
short s = (short)x;
int i = (int)x;
long 1 = (long)x:
float f = (float)x;
double d = (double)x,
}
void byteTest(byte x. byte y) {
// Арифметические операции- x = (byte)(x* у): x = (byte)(x / y): x = (byte)(x % y), x = (byte)Cx + y); x = (byte)(x - y), x++: x--:
x = (byte)+ y: x = (byte)- y:
// Операции сравнения и логические операции:
f(x > у);
f(x >= у):
f(x < у);
f(x <= у):
f(x == у):
f(x != у):
//! f(!x):
//! f(x && у),
//! f(x || у); // Поразрядные операции: х = (byte)-y; х = (byte)(х & у): х = (byte)(x | у); х = (byte)(x А у); х = (byte)(x « 1); х = (byte)(x » 1); х = (byte) (х »> 1). // Совмещенное присваивание: х += у: х -= у: х *= у: х /= у: х у. х «= 1; х »= 1, х »>= 1, х &= у; х у. х |= У,
// Приведение:
//! boolean b = (boolean)x,
char с = (char)x;
short s = (short)x;
int i = (int)x:
long 1 = (long)x:
float f = (float)x.
double d = (double)x,
}
void shortTest(short x. short y) { // Арифметические операции: x = (shortKx * y): x = (shortKx / y), x = (shortKx % y): x = (shortKx + y); x = (shortKx - y): x++; x--:
x = (short)+y, x = (short)-y;
// Операции сравнения и логические
f(x > у);
f(x >= у):
f(x < у):
f(x <= у);
f(x == у);
f(x != у);
//! f(!x);
//! f(x && у);
//! f(x || у):
// Поразрядные операции:
х = (short)~у,
х = (shortKx & у);
х = (shortKx | у):
х = (short)(х А у):
х = (shortKx « 1);
операции:
х = (shortKx » 1);
х = (short)(х »> 1); // Совмещенное присваивание: х += у. х -= у. х *= у. х /= у: х %= у: х «= 1.
X »= 1. X »>= 1.
X &= у: х А= у. х |= у:
// Преобразование
//> boolean b = (boolean)x.
char с = (char)x.
byte В = (byte)x,
int i = (int)x.
long 1 = (long)x,
float f = (float)x;
double d = (double)x.
}
void intTest(int x, int y) {
// Арифметические операции:
x = x * у:
x = x / у.
х = х % у,
х = х + у,
х = х - у,
х++;
х- -:
х = +у;
х = -у.
// Операции сравнения и логические операции:
f(х > у).
f(х >= у).
f(х < у):
f(x <= у):
f(х == у).
f(х у).
//! f(!x):
//' f(x && у).
//! f(x || у),
// Поразрядные операции:
х = -у.
X = X & у,
X = X I у,
х = х А у:
х = х « 1;
х = х » 1:
х = х »> 1.
// Совмещенное присваивание- х += у; х -= у. х *= у. х /= у. х Х- у, х «= 1;
X »= 1.
х »>= 1; х &= у; х А= у. х |= у:
// Приведение-
//' boolean b = (boolean)x;
char с = (char)x,
byte В = (byte)x;
short s = (short)x;
long 1 = (long)x;
float f = (float)x,
double d = (double)x;
}
void longTestdong x, long y) {
// Арифметические операции:
x = x * у:
x = x / у;
x = x % у.
х = х + у:
х = х - у,
х++,
х- -;
х = +у;
х = -у:
// Операции сравнения и логические
f(х > у):
f(х >= у):
f(х < у),
f(х <= у):
f (х == у).
f(х != у).
//! f(!x).
//! f(x && у),
//! f(x || у):
// Поразрядные операции.
х = ~у.
х = х & у:
х = х | у: