English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Сборники Java Map

Сборники Java Set

Ввод/вывод Java (I/O)

Reader/Writer Java

Другие темы Java

Основные типы данных Java

Переменная - это запрос памяти для хранения значений. То есть, при создании переменной необходимо запрашивать пространство в памяти.

Система управления памятью 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:

Тип данныхЗначение по умолчанию
byte0
short0
int0
long0L
float0.0f
double0.0d
char'u0000'
String (или любой объект)null
booleanfalse

Онлайн пример

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

Константы не могут быть изменены во время выполнения программы.

В 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. В следующем разделе будет рассмотрено различные типы переменных и их использование.