Яка різниця між
Object foo = "something";
String bar = String.valueOf(foo);
і
Object foo = "something";
String bar = (String) foo;
Відповіді:
Прив’язка до рядка працює лише тоді, коли об’єктом насправді є рядок:
Object reallyAString = "foo";
String str = (String) reallyAString; // works.
Це не буде працювати, коли об’єктом є щось інше:
Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
String.valueOf()однак намагатиметься перетворити все, що ви передасте, в String. Він обробляє як примітиви ( 42), так і об'єкти ( new Integer(42), використовуючи об'єкти toString()):
String str;
str = String.valueOf(new Integer(42)); // str will hold "42"
str = String.valueOf("foo"); // str will hold "foo"
Object nullValue = null;
str = String.valueOf(nullValue); // str will hold "null"
Особливо зверніть увагу на останній приклад: перехід nullдо String.valueOf()поверне рядок "null".
String.valueOf()та obj.toString()? (Перше, що мені спадає на думку, це те obj.toString(), що через виняток objмає значення null.)
null. Якщо ви подивитесь на реалізацію String.valueOf()у вашому JDK, то побачите, що все, що він робить для ненульових посилань - це виклик toString().
String.valueOf()це елегантніше, ніж акторський склад . Але якщо String.valueOf()все, що робить кастинг, і багато іншого, чи є якісь причини, чому хтось вирішить використовувати акторський склад? Чому це не застаріло?
String.valueOf((Object) null)поверне рядок "null". Виклик його з nullлітералом викликає String # valueOf (char []), який фактично видає NPE при вході null.
String.valueOf(foo)Запускаю Foo «s .toString()методу і привласнює результат до бару . Це безпечний для експлуатації тип.
Кастинг буде просто надайте Foo в бар , якщо типи відповідності. В іншому випадку вираз викине a ClassCastException.
String.valueOf(Object)викликаєObject.toString()
Обидва генерують однакові результати у випадку String.
Casting не вдається у випадку, якщо наданий об'єкт не є string.
Метод String.valueOf використовується, щоб отримати подання String об'єкта параметра.
(Рядок) значення передає значення об’єкта в рядок.
Ви можете використовувати метод String.valueOf, щоб отримати представлення об’єкта String, не турбуючись про нульові посилання. Якщо ви спробуєте привести String до нульового посилання, ви отримаєте NullPointerException.
Перший, тобто String.valueOfповертає рядок, лише якщо об'єкт є типом, що представляється, який є типом значення або рядком. В іншому випадку він видає виняток.
В останньому ви здійснюєте прямий привід, який може зазнати невдачі, якщо об’єкт не є рядком.
Інтернет-приклад.
у String.valueOf (); рядок як тип роботи, який передає весь аргумент, переданий у методі valueof (), перетворює в String, як і integer.string (), перетворює ціле число лише у рядок