Java/Типы данных: различия между версиями

Содержимое удалено Содержимое добавлено
оформление, стилевые правки, уточнение, обновление данных
Строка 2:
 
== Примитивные типы ==
В Java есть несколько7 примитивных типов, переменных.которые Вседелят типы:на 3 группы, вот они:
 
# Целые числа - <tt>byte</tt>, <tt>short</tt>, <tt>char</tt>, <tt>int</tt>, <tt>long</tt>
# Целочисленные
# Числа с плавающей точкой( (иначе дробные) - <tt>float</tt>, <tt>double</tt>
# Логический - <tt>boolean</tt>
# boolean (логический)
# Строка
# Примитивные
 
=== Целочисленные типы данных ===
 
Целочисленные типы различаются между собой только диапазонами возможных значений, например для хранения номера элемента в таблице Менделеева пока хватит переменной типа <tt>byte</tt>.
{| class="wikitable"
|-
! Тип !! Размер (бит) !! Диапазон
|-
| <tt>byte</tt> || 8 бит || от -128 до 127
|-
| <tt>short</tt> || 16 бит || от -32768 до 32767
|-
| int<tt>char</tt> || 3216 бит || от -21474836480 до 214748364765535
|-
| long<tt>int</tt> || 6432 бит || от -92233720368547758082147483648 до 92233720368547758072147483647
|-
| <tt>long</tt> || 64 бит || от -9223372036854775808 до 9223372036854775807
|}
 
Пример использования целочисленных типов :
Пример использования целочисленных типов:
<div style="font-size:100%;"><source lang="java">
<source lang="java">
public class Type {
public staticclass voidIntegralTypes main (String [] arg){
public static void main(String[] args) {
int c = 3+2;
byte cbb = -128+127;
short s = 22223+11377;
long int upi = 334+112321431488;
long l = 2147483648L; // Префикс l или L обозначает литералы типа long
System.out.println (c);
System.out.println (cbi);
System.out.println (sb);
System.out.println (ups);
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>
 
</div>
=== Типы с плавающей точкой ===
=== Дробные типы ===
{| class="wikitable"
|-
! Тип !! Размер (бит) !! Диапазон
|-
| <tt>float</tt> || 32 || от 3-1.4e-03845f до 3.4e+03838f
|-
| <tt>double</tt> || 64 || от 1-4.9e-308324 до 1.7е+308
|-
|}
Пример использования:
<source lang="java">
public class DoubleFloatFloatingPointTypes {
public static void main (String [] argargs) {
double b1a, b2b = 4.12;
b1 a = 22.1 +b2 b;
float pi = 3.14f; // При использовании типа float требуется указывать суффикс f или F
//преобразование типа, так как дробные числа - это литералы типа double
float pipianotherPi = (float) 3.14; // Можно ипривести такявно
double dc = 27;
double cd = pi *d c;
System.out.println (cd);
}
}
}
</source>
 
=== Логический тип boolean ===
{| class="wikitable"
|-
! Тип !! Размер (бит) !! Значение
|-
| <tt>boolean</tt> || 1 (в массивах), 32 (не в массивах используется int) || true (истина) или false (ложь)
|-
|}
 
=== СтрокаСсылочные ===
Ссылочные типы это все остальные типы - классы, перечисления и интерфейсы, например объявленные в стандартной библиотеке Java, а также массивы.
Обыкновенная строка вроде "Hello, world!"
Пример использования:
<source lang="java">
public class String {
public static void main (String [] arg){
String a = "Hello, ";
String b = "World!";
System.out.println(a+b);
//В данном случае программа не будет использовать арифметику,
//Соединение строк называется конкатенация
}
}
</source>
 
=== ПримитивныеСтроки ===
Строки это объекты класса <tt>String</tt>, они очень распространены, поэтому в некоторых случаях обрабатываются отлично от всех остальных объектов. Строковые литералы записываются в двойных кавычках.
char - тип символов
<source lang="java">
public class CharStrings {
 
public static void main(String[] args) {
String a = "Hello", b = "World";
char chr = 'a';
System.out.println(a + " " + b); // Здесь + означает объединение (конкатенацию) строк
System.out.println(chr);
// Пробел не вставляется автоматически
}
 
// Строки конкатенируются слева направо, надо помнить это когда соединяешь строку и примитив
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>
Выведет: символ 'a'.
<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).
* Integer
{| class="wikitable"
* Long
|-
* Float
! Тип !! Класс-обертка
* Double
|-
* Boolean
| <tt>byte</tt> || Byte
* Character
|-
Пример:
| <tt>short</tt> || Short
<div style="font-size:100%;"><source lang="java">
|-
| <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;
// Явный анбоксинг
Integer oI;
oIi = new Integerboxed.intValue(i);
// Автоматический анбоксинг
i = boxed;
</source>
</div>
 
{{BookCat}}