English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Переменная - это запрос памяти для хранения значений. То есть, при создании переменной необходимо запрашивать пространство в памяти.
Система управления памятью assigns хранилище в зависимости от типа переменной, выделенное пространство можно использовать только для хранения данных этого типа.
Таким образом, через определение различных типов переменных, можно хранить в памяти целые числа, дробные числа или символы.
Два больших типа данных Java:
Внутренние данные типа
Ссылочные данные типа
Язык Java предоставляет восемь основных типов. Шесть числовых типов (четыре целых типа, два типа с плавающей запятой), один тип символов и один булевый тип.
byte:
Тип данных byte - 8-битное целое число, представленное двоичным кодом с комплементом;
Минимальное значение - -128 (-2^7);
Максимальное значение - 127 (2^7 - 1);
Значение по умолчанию - 0;
Тип byte используется для экономии места в больших массивах, в основном для замены целых чисел, так как переменная byte занимаемое место в четыре раза меньше, чем у типа int;
Пример: byte a = 100, byte b = -50;
short:
Тип данных short - 16-битное целое число, представленное двоичным кодом с комплементом;
Минимальное значение - -32768 (-2^15);
Максимальное значение - 32767 (2^15 - 1);
Тип данных Short также может экономить память, как и byte. Одна переменная типа short занимает вдвое меньше места, чем переменная типа int;
Значение по умолчанию - 0;
Пример: short s = 1000, short r = -20000;
int:
Тип данных int - 32-битное целое число, представленное двоичным кодом с комплементом;
Минимальное значение - -2,147,483,648 (-2^31);
Максимальное значение - 2,147,483,647 (2^31 - 1);
Обычно переменные целого типа по умолчанию имеют тип int;
Значение по умолчанию - 0;
Пример: int a = 100000, int b = -200000;
long:
Тип данных long - 64-битное целое число, представленное двоичным кодом с комплементом;
Минимальное значение - -9,223,372,036,854,775,808 (-2^63);
Максимальное значение - 9,223,372,036,854,775,807 (2^63 - 1);
Этот тип主要用于 системах, где необходимо работать с большими целыми числами;
Значение по умолчанию - 0L;
Пример: long a = 100000L, Long b = -200000L;
"L" теоретически не имеет_case, но если写成 "l", он легко может быть спутан с числом "1", и его трудно отличить. Поэтому лучше использовать заглавные буквы.
float:
Тип данных float - это одинарная точность, 32-битное浮点ное число, соответствующее стандарту IEEE 754;
Тип float позволяет экономить память при хранении больших массивов чисел с плавающей запятой;
Значение по умолчанию - 0.0f;
Числа с плавающей запятой не могут использоваться для представления точных значений, таких как деньги;
Пример: float f1 = 234.5f.
double:
Тип double - это двоичная точность, 64 бита, соответствующий стандарту IEEE 754;
По умолчанию тип плавающей точки: double;
Тип double также не может точно представить значения, такие как деньги;
Значение по умолчанию: 0.0d;
Пример: double d1 = 123.4。
boolean:
Тип boolean представляет информацию о единице;
Только два значения: true и false;
Этот тип используется только как флаг для записи ситуаций true/false;
Значение по умолчанию: false;
Пример: boolean one = true。
char:
Тип char - это одиночный 16-битный символ Unicode;
Минимальное значение: \u0000 (то есть 0);
Максимальное значение: \uffff (то есть 65,535);
Тип char может хранить любой символ;
Пример: char letter = 'A';。
Для числовых типов основных типов диапазон значений не нужно запоминать насильно, потому что их значения уже определены в виде констант в соответствующих обертках. Посмотрите на следующий пример:
public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("Основной тип: byte битность: " + Byte.SIZE); System.out.println("Обертка: java.lang.Byte); System.out.println("Минимальное значение: Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("Максимальное значение: Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short System.out.println("Основной тип: short битность: " + Short.SIZE); System.out.println("Обертка: java.lang.Short); System.out.println("Минимальное значение: Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("Максимальное значение: Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int System.out.println("Основной тип: int битность: " + Integer.SIZE); System.out.println("Обертка: java.lang.Integer); System.out.println("Минимальное значение: Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("Максимальное значение: Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("Основной тип: long размер в байтах: " + Long.SIZE); System.out.println("Обертка: java.lang.Long); System.out.println("Минимальное значение: Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("Максимальное значение: Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("Основной тип: float размер в байтах: " + Float.SIZE); System.out.println("Обертка: java.lang.Float); System.out.println("Минимальное значение: Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("Максимальное значение: Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("Основной тип: double размер в байтах: " + Double.SIZE); System.out.println("Обертка: java.lang.Double); System.out.println("Минимальное значение: Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("Максимальное значение: Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("Основной тип: char размер в байтах: " + Character.SIZE); System.out.println("Пакет: java.lang.Character"); // Вывод Character.MIN_VALUE в виде числа, а не символа, на экран System.out.println("Минимальное значение: Character.MIN_VALUE="); +(int)Character.MIN_VALUE); // Вывод Character.MAX_VALUE в виде числа, а не символа, на экран System.out.println("Максимальное значение: Character.MAX_VALUE="); +(int)Character.MAX_VALUE); } }
Компилируйте следующий код, и результат будет выглядеть так:
Основной тип: byte Размер в байтах: 8 Пакет: java.lang.Byte Минимальное значение: Byte.MIN_VALUE=-128 Максимальное значение: Byte.MAX_VALUE=127 Основной тип: short Размер в байтах: 16 Пакет: java.lang.Short Минимальное значение: Short.MIN_VALUE=-32768 Максимальное значение: Short.MAX_VALUE=32767 Основной тип: int Размер в байтах: 32 Пакет: java.lang.Integer Минимальное значение: Integer.MIN_VALUE=-2147483648 Максимальное значение: Integer.MAX_VALUE=2147483647 Основной тип: long Размер в байтах: 64 Пакет: java.lang.Long Минимальное значение: Long.MIN_VALUE=-9223372036854775808 Максимальное значение: Long.MAX_VALUE=9223372036854775807 Основной тип: float Размер в байтах: 32 Пакет: java.lang.Float Минимальное значение: Float.MIN_VALUE=1.4E-45 Максимальное значение: Float.MAX_VALUE=3.4028235E38 Основной тип: double Размер в байтах: 64 Пакет: java.lang.Double Минимальное значение: Double.MIN_VALUE=4.9E-324 Максимальное значение: Double.MAX_VALUE=1.7976931348623157E308 Основной тип: char Размер в байтах: 16 Пакет: java.lang.Character Минимальное значение: Character.MIN_VALUE=0 Максимальное значение: Character.MAX_VALUE=65535
Минимальные и максимальные значения Float и Double выводятся в виде научной нотации, "E+число" в конце означает, что цифры перед E нужно умножить на 10 в соответствующей степени. Например, 3.14E3 это 3.14 × 103 =3140, 3.14E-3 это 3.14 x 10-3 =0.00314。
На самом деле, в JAVA существует еще один базовый тип void, у него также есть соответствующий обертка java.lang.Void, но мы не можем напрямую с ними работать.
В таблице ниже приведены значения по умолчанию для всех типов Java:
Тип данных | Значение по умолчанию |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | 'u0000' |
String (или любой объект) | null |
boolean | false |
public class Test { static boolean bool; static byte by; static char ch; static double d; static float f; static int i; static long l; static short sh; static String str; public static void main(String[] args) { System.out.println("Бул: " + bool); System.out.println("Байт: " + by); System.out.println("Чар: " + ch); System.out.println("Дабл: " + d); System.out.println("Флоат: " + f); System.out.println("Инт: " + i); System.out.println("Долг: " + l); System.out.println("Сократ: " + sh); System.out.println("Стринг: " + str); } }
Пример вывода:
Bool : false Byte : 0 Character Double : 0.0 Float : 0.0 Integer : 0 Long : 0 Short : 0 String : null
В Java переменные ссылочных типов очень похожи на указатели в C/C++. Ссылочные типы указывают на объект, а переменные, указывающие на объект, являются ссылочными переменными. Эти переменные при их声明е должны быть指定ованы определенным типом, например Employee, Puppy и т.д. После их объявления тип переменной не может быть изменен.
Объекты и массивы являются типами ссылок.
Значением по умолчанию для всех типов ссылок является null.
Ссылочные переменные могут использоваться для ссылки на любой совместимый тип.
Пример: Site site = new Site("w3codebox").
Константы не могут быть изменены во время выполнения программы.
В Java для модификации констант используется ключевое слово final, способ объявления аналогичен переменным:
final double PI = 3.1415927;
Хотя имена констант также могут быть написаны строчными буквами, для удобства их辨认 обычно используют строчные буквы.
Литералы могут быть присвоены любому встроенному типу переменной. Например:
byte a = 68; char a = 'A';
byte, int, long и short могут быть выражены в десятичной, шестнадцатеричной и восьмеричной системах счисления.
При использовании констант префикс 0 означает восьмеричную систему счисления, а префикс 0x — шестнадцатеричную, например:
int decimal = 100; int octal = 0144; int hexa = 0x64;
Как и другие языки, строковые литералы в Java также содержат собой последовательность символов, заключенных в две кавычки. Примеры строковых литералов:
"Hello World" "two\nlines" "\"This is in quotes\""
Строковые литералы и литералы символов могут содержать любые символы Unicode. Например:
char a = '\u0001'; String a = "\u0001";
Язык Java поддерживает некоторые особые последовательности escaping.
символ | значение символа |
---|---|
\n | переход на новую строку (0x0a) |
\r | возврат каретки (0x0d) |
\f | страница (0x0c) |
\b | отступ (0x08) |
\0 | символ нуля (0x0) |
\s | пробел (0x20) |
\t | табуляция |
\" | двоеточие |
\' | Одинарная кавычка |
\\ | Обратная косая черта |
\ddd | Октальный символ (ddd) |
\uxxxx | Шестнадцатеричный Unicode символ (xxxx) |
Целые, плавающие и символические данные могут быть смешаны в вычислениях. В вычислениях данные различных типов сначала преобразуются в один и тот же тип, а затем выполняются вычисления.
Преобразование от низшего к высшему.
Низкий — ------------------------------------> — Высокий byte, short, char —> int —> long —> float —> double
Преобразование типов данных должно satisfy следующим правилам:
1. Не можно выполнять преобразование типа для типа данных boolean.
2. Не можно преобразовать объектный тип в объект не связанного класса.
3. При преобразовании из типа данных с большим количеством знаков в тип данных с меньшим количеством знаков необходимо использовать принудительное преобразование типа.
4. Во время преобразования может произойти переполнение или потеря точности, например:
int i = 128; byte b = (byte)i;
Поскольку тип данных byte 8-битный, максимальное значение 127, поэтому при принудительном преобразовании типа int в byte, когда значение 128, это приведет к переполнению.
5. Преобразование из плавающей точки в целое выполняется отбрасыванием дробной части, а не округлением, например:
(int)23.7 == 23; (int)-45.89f == -45
Необходимо satisfy, что количество знаков в исходном типе данных должно быть меньше, чем в целевом типе данных, например: у типа данных short количество знаков 16, поэтому можно автоматически преобразовать в тип данных int с 32 знаками, также тип данных float с 32 знаками можно автоматически преобразовать в тип данных double с 64 знаками.
public class ZiDongLeiZhuan{ public static void main(String[] args){ char c1 = 'a'; // определение типа char int i1 = c1; // автоматическое преобразование типа char в int System.out.println("Значение автоматического преобразования типа char в int равно " + i1); char c2 = 'A'; // определение типа char int i2 = c2 + 1; // вычисление типа char и int System.out.println("Значение типа char и вычисленного int равно " + i2); } }
Результат выполнения:
Значение автоматического преобразования типа char в int равно 97 Значение типа char и вычисленного int равно 66
解析:Значение c1 равно символу a Из таблицы ASCII можно узнать, что соответствующее значение типа int равно 97, а A равно 65, поэтому i2 = 65 + 1 = 66.
1. Условие - данные для преобразования должны быть совместимы.
2. Формат: (тип)значение тип - это тип данных, в который выполняется принудительное преобразование Пример:
public class QiangZhiZhuanHuan{ public static void main(String[] args){ int i1 = 123; byte b = (byte)i1; // принудительное преобразование в byte System.out.println("Значение int, преобразованное в byte, равно"+b); } }
Результат выполнения:
Значение int, преобразованное в byte, равно 123
1. Тип по умолчанию для целых чисел - int.
2. В случае с плавающей точкой это не так,因为在 определении типа float необходимо следовать за числом F или f.
Этот раздел объясняет основные типы данных в Java. В следующем разделе будет рассмотрено различные типы переменных и их использование.