Integer.toString
вызывает статический метод в классе Integer
. Ему не нужен экземпляр Integer
.
Если вы вызываете new Integer(i)
, вы создаете экземпляр типа Integer
, который является полным Java-объектом, инкапсулирующим значение вашего int. Затем вы вызываете для него метод toString
, чтобы попросить его вернуть строковое представление самого .
Если все, что вам нужно, это напечатать int
, вы бы использовали первый, потому что он легче, быстрее и не использует дополнительную память (кроме возвращаемой строки).
Если вы хотите, чтобы объект, представляющий целочисленное значение - например, для помещения его в коллекцию, - вы бы использовали второй, поскольку он дает вам полноценный объект для выполнения всех видов вещей, с которыми вы не можете делать голый int
.