C# Boxing (упаковка) и UnBoxing (распаковка) что это за техники?

В описании к коллекции ArrayList встретил два непонятных названия упаковка и распаковка. Говориться что при добавлении элемента в коллекцию происходит упаковка, а в будущем для его получения нужно использовать технику распаковки. Что это за техники и и они ещё где-то используются?

Упаковка представляет собой процесс преобразования структурного типа в тип object или любой другой тип интерфейса, реализуемый этим типом.
Операция распаковки извлекает структурный тип из объекта.

Упаковка - преобразование является неявным.
Распаковка - преобразование является явным.

static void Main()
{
     int item = 10;
     object obj = item;      //упаковка
     int item2 = (int)obj;   //распаковка
}