x = 10; Это не то же самое, что x = new Integer(10);
Автобоксинг раскрывается в Integer.valueOf(10); Существенным отличием является то, что для Integer существует кэш из 256 элементов (от -128 до 127). Если значение, передаваемое в Integer.valueOf(), попадает в этот промежуток, будет возвращено значение из кэша, и новых инстансов создано не будет, в отличии от new Integer(), так как new всегда создает новый экземпляр. Рекомендуется никогда не использовать new для оберток примитивных типов, для каждого из них есть valueOf().