Назовите базовые типы данных.android-3

1. Примитивные типы

Особенности:

  • Хранят непосредственно значения
  • Не являются объектами
  • Имеют фиксированный размер в памяти
  • Начинаются с маленькой буквы

Основные примитивные типы в Java:

Тип Размер Диапазон значений Пример
byte1 байт-128 .. 127byte b = 10
short2 байт-32,768 .. 32,767short s = 1000
int4 байт-2^31 .. 2^31-1 (±2.1 млрд)int i = 100000
long8 байт-2^63 .. 2^63-1long l = 10000000000L
float4 байт±3.4e+38 (7 значащих цифр)float f = 3.14f
double8 байт±1.7e+308 (15 значащих цифр)double d = 3.1415926535
char2 байт0 .. 65,535 (символы Unicode)char c = 'A'
boolean1 битtrue или falseboolean flag = true

Важно в Android:

  • Для хранения ID ресурсов обычно используют int
  • Для денежных расчетов лучше BigDecimal (не примитив)
  • Для оптимизации памяти в больших массивах можно использовать byte/short

2. Ссылочные типы

Особенности:

  • Хранят ссылку на объект в памяти
  • Начинаются с заглавной буквы
  • Могут быть null

Основные ссылочные типы:

  1. Обертки над примитивами (Wrapper classes)

    • Byte, Short, Integer, Long
    • Float, Double
    • Character
    • Boolean

    Пример:

    Integer count = 10;  // автоупаковка (autoboxing)
    int i = count;       // распаковка (unboxing)
    
  2. Строки

    • String - неизменяемая (immutable)
    • StringBuilder/StringBuffer - изменяемые

    Пример:

    val name: String = "Android"
    val builder = StringBuilder().append("Hello").append(" World")
    
  3. Массивы

    • int[], String[] и т.д.
    • В Kotlin: Array<T>, IntArray и др.

    Пример:

    val numbers: IntArray = intArrayOf(1, 2, 3)
    val names: Array<String> = arrayOf("Alice", "Bob")
    

3. Особенности в Kotlin

Kotlin делает различия более явными:

  1. Все типы объектные (даже примитивы "под капотом")

    • Int, Double, Boolean и т.д. - классы
    • При компиляции в JVM оптимизируются в примитивы где возможно
  2. Nullable vs Non-nullable типы:

    • String - не может быть null
    • String? - может быть null

    Пример:

    val nonNullable: String = "text"  // обязательно значение
    val nullable: String? = null     // разрешено null
    

4. Специальные типы в Android

  1. Parcelable - для передачи между компонентами Android

  2. Serializable - для сериализации объектов

  3. Enum - перечисления (используются для констант)

    enum class Color { RED, GREEN, BLUE }
    
  4. Unit (аналог void в Java) - означает отсутствие значения

  5. Any (аналог Object в Java) - корневой тип всех классов

Резюмируем

  1. Примитивные типы (8 штук в Java) - хранят значения напрямую, эффективны по памяти
  2. Ссылочные типы - хранят ссылки на объекты, могут быть null
  3. В Kotlin все типы представлены как объекты, но оптимизируются в примитивы
  4. Важные различия:
    • Примитивы более эффективны, но ограничены
    • Ссылочные типы поддерживают OOP-функционал
    • В Android контексте важно учитывать:
      • Использование int для ресурсов
      • Parcelable для межпроцессного взаимодействия
      • Null-safety в Kotlin

P.S. На собеседованиях часто спрашивают про автоупаковку/распаковку (autoboxing/unboxing) и их влияние на производительность - будьте готовы!