Какой тип Subject сохраняет последнее отправленное значение и передает его новым подписчикам в RxJava

«Какой тип Subject сохраняет последнее отправленное значение и передает его новым подписчикам в RxJava» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

BehaviorSubject сохраняет последнее отправленное значение и передает его новым подписчикам сразу после подписки.

Пример:

val subject = BehaviorSubject.create<Int>()
subject.onNext(1)
subject.onNext(2)

subject.subscribe { println("Subscriber 1: $it") } // Выведет 2
subject.onNext(3) // Выведет 3 для Subscriber 1

subject.subscribe { println("Subscriber 2: $it") } // Выведет 3

Полезен для передачи текущего состояния (например, кэшированных данных).