Іноді Java спантеличує мене.
Мені потрібно зробити величезну кількість ініціалізацій int.
В чому полягає реальна різниця?
Integer.toString(i)
new Integer(i).toString()
Integer.toString
викликає статичний метод в класі Integer
. Екземпляр класу Integer
не потрібен.
Якщо ви викликаєте new Integer(i)
, ви створюєте екземпляр типу Integer
, який є повноцінним об'єктом Java, що інкапсулює значення вашого int. Потім ви викликаєте для нього метод toString
, щоб попросити його повернути рядкове представлення себе.
Якщо все, що вам потрібно, це надрукувати int
, ви б використовували перший варіант, тому що він легший, швидший і не використовує додаткову пам'ять (окрім рядка, що повертається).
Якщо вам потрібен об'єкт, що представляє цілочисельне значення - наприклад, щоб помістити його в колекцію - ви будете використовувати другий варіант, оскільки він дає вам повноцінний об'єкт, щоб робити всілякі речі, які ви не можете зробити з голим int
.
new Integer(i).toString()спочатку створює (надлишковий) об'єкт-обгортку навколо
i(який сам може бути об'єктом-обгорткою
Integer`).
Метод Integer.toString(i)
є кращим, оскільки він не створює зайвих об'єктів.
new Integer(i).toString();
Цей оператор створює об'єкт Integer, а потім викликає його методи toString(i)
для повернення рядкового представлення значення Integer.
Integer.toString(i);
Повертає об'єкт String, що представляє конкретний int (ціле число)**, але тут toString(int)
є статичним
методом.
Отже, у першому випадку повертається рядкове представлення об'єктів, тоді як у другому випадку повертається рядкове представлення цілого числа.