Java/Типы данных: различия между версиями
Содержимое удалено Содержимое добавлено
оформление, стилевые правки, уточнение, обновление данных |
|||
Строка 2:
== Примитивные типы ==
В Java есть
# Целые числа - <tt>byte</tt>, <tt>short</tt>, <tt>char</tt>, <tt>int</tt>, <tt>long</tt>
# Числа с плавающей точкой
# Логический - <tt>boolean</tt>
=== Целочисленные типы
Целочисленные типы различаются между собой только диапазонами возможных значений, например для хранения номера элемента в таблице Менделеева пока хватит переменной типа <tt>byte</tt>.
{| class="wikitable"
|-
! Тип !! Размер (бит) !! Диапазон
|-
| <tt>byte</tt> || 8 бит || от -128 до 127
|-
| <tt>short</tt> || 16 бит || от -32768 до 32767
|-
|
|-
|
|-
| <tt>long</tt> || 64 бит || от -9223372036854775808 до 9223372036854775807
|}
Пример использования целочисленных типов:
<source lang="java">
public
public static void main(String[] args) {
byte
short s =
long l = 2147483648L; // Префикс l или L обозначает литералы типа long
System.out.println
System.out.println
System.out.println
System.out.println(l);
}
}
</source>
Символы тоже относят к целочисленным типам из-за особенностей представления в памяти и традиций.
<source lang="java">
public class Characters {
public static void main(String[] args) {
char a = 'a', b, c = 'c';
b = (char) ((a + c) / 2); // Можно складывать, вычитать, делить и умножать
// Но из-за особенностей арифметики Java результат приходится приводить к типу char явно
System.out.println(b); // Выведет символ 'b'
}
}
</source>
=== Типы с плавающей точкой ===
{| class="wikitable"
|-
! Тип !! Размер (бит) !! Диапазон
|-
| <tt>float</tt> || 32 || от
|-
| <tt>double</tt> || 64 || от
|-
|}
Пример использования:
<source lang="java">
public class
}
}
</source>
=== Логический тип
{| class="wikitable"
|-
! Тип !! Размер (бит) !! Значение
|-
| <tt>boolean</tt> || 1 (в массивах), 32 (не в массивах используется int) || true (истина) или false (ложь)
|-
|}
Ссылочные типы это все остальные типы - классы, перечисления и интерфейсы, например объявленные в стандартной библиотеке Java, а также массивы.
===
Строки это объекты класса <tt>String</tt>, они очень распространены, поэтому в некоторых случаях обрабатываются отлично от всех остальных объектов. Строковые литералы записываются в двойных кавычках.
<source lang="java">
public class
public static void main(String[] args) {
String a = "Hello", b = "World";
System.out.println(a + " " + b); // Здесь + означает объединение (конкатенацию) строк
// Пробел не вставляется автоматически
// Строки конкатенируются слева направо, надо помнить это когда соединяешь строку и примитив
String c = 2 + 2 + ""; // "4"
String d = "" + 2 + 2; // "22"
d = "" + (2 + 2); // а теперь d тоже "4"
String foo = "a string";
String bar = "a string"; // bar будет указывать на тот же объект что и foo
String baz = new String("a string"); // Что бы гарантированно создать новую строку надо вызвать конструктор
System.out.println("foo == bar ? " + (foo == bar)); // == сравнивает ссылки на объекты
System.out.println("foo равен bar ? " + (foo.equals(bar))); // Метод equals служит для проверки двух объектов на равенство
System.out.println("foo == baz ? " + (foo == baz));
System.out.println("foo равен baz ? " + (foo.equals(baz)));
}
}
</source>
Эта программа выведет:<br>
<tt>
Hello World<br>
foo == bar ? true<br>
foo равен bar ? true<br>
foo == baz ? false<br>
foo равен baz ? true<br>
</tt>
=== Обертки ===
Если требуется создать ссылку на одни из примитивных типов данных, необходимо использовать соответствующий класс-обертку. Также в таких классах есть некоторые полезные методы и константы, например минимальное значение типа <tt>int</tt> можно узнать использовав константу <tt>Integer.MIN</tt>. Оборачивание примитива в объект называется боксингом (boxing), а обратный процесс анбоксингом (unboxing).
{| class="wikitable"
|-
! Тип !! Класс-обертка
|-
| <tt>byte</tt> || Byte
|-
| <tt>short</tt> || Short
|-
| <tt>int</tt> || Integer
|-
| <tt>long</tt> || Long
|-
| <tt>char</tt> || Character
|-
| <tt>float</tt> || Float
|-
| <tt>double</tt> || Double
|-
|}
Пример использования:
<source lang="java">
int i;
Integer boxed;
// Обычное создание объекта
boxed = new Integer(i);
// Фабричный метод
boxed = Integer.valueOf(i);
// Автоматический боксинг, компилятор просто вставит вызов Integer.valueOf
boxed = i;
</source>
Рекомендуется использовать <tt>valueOf</tt>, он может быть быстрее и использовать меньше памяти потому что применяет кэширование, а конструктор всегда создает новый объект.
Получить примитив из объекта-обертки можно методом <tt><примитивный тип>Value</tt>.
<source lang="java">
Integer boxed;
int i;
// Явный анбоксинг
// Автоматический анбоксинг
i = boxed;
</source>
{{BookCat}}
|