Почему мы используем «объект-компаньон» в качестве замены статических полей Java в Kotlin?

Что подразумевается под «сопутствующим объектом»? До сих пор я использовал его только для замены Javastatic когда мне это нужно.

Я смущен с:

Почему это называется «компаньон»?Означает ли это, что для создания несколькихстатический свойства, я должен сгруппировать его внутриcompanion object блок?Чтобы мгновенно создать одноэлементный экземпляр, относящийся к классу, я часто пишу

:

companion object {
    val singleton by lazy { ... }
}

который выглядит как однотипный способ сделать это. Какой способ лучше?