Jaka jest różnica pomiędzy
Object foo = "something";
String bar = String.valueOf(foo);
i
Object foo = "something";
String bar = (String) foo;
Jaka jest różnica pomiędzy
Object foo = "something";
String bar = String.valueOf(foo);
i
Object foo = "something";
String bar = (String) foo;
Odpowiedzi:
Rzutowanie na łańcuch działa tylko wtedy, gdy obiekt jest łańcuchem:
Object reallyAString = "foo";
String str = (String) reallyAString; // works.
Nie zadziała, gdy obiekt jest czymś innym:
Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
String.valueOf()
jednak spróbuje przekształcić wszystko, co do niego przekażesz, na plik String
. Obsługuje zarówno prymitywy ( 42
), jak i obiekty ( new Integer(42)
, używając tego obiektu 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"
Zwróć uwagę szczególnie na ostatni przykład: przekazanie null
do String.valueOf()
zwróci ciąg "null"
.
String.valueOf()
a obj.toString()
? (Pierwszym, który przychodzi mi do głowy, jest to, że obj.toString()
przejdzie przez wyjątek, jeśli obj
jest zerowy.)
null
. Jeśli spojrzysz na implementację String.valueOf()
w swoim JDK, zobaczysz, że wszystko, co robi w przypadku odwołań niezerowych, to wywołanie toString()
.
String.valueOf()
jest bardziej elegancki niż obsada. Ale jeśli String.valueOf()
wszystko, co robi casting, a nawet więcej, czy są jakieś powody, dla których ktoś zdecydowałby się użyć obsady? Dlaczego nie został wycofany?
String.valueOf((Object) null)
zwróci String „null”. Wywołanie go literałem null
wywoła String # valueOf (char []), który w rzeczywistości generuje NPE, gdy przekazujesz null
.
String.valueOf(foo)
Wywołuje foo „s .toString()
metody i przypisuje wynik do The bar . Jest to operacja zerowa i bezpieczna dla typu.
Rzutowanie po prostu przypisze foo do paska , jeśli typy są zgodne. W przeciwnym razie wyrażenie zwróci ClassCastException
.
String.valueOf(Object)
wywołujeObject.toString()
Oba generują ten sam wynik w przypadku String
.
Casting
kończy się niepowodzeniem w przypadku, gdy podany obiekt nie jest plikiem string.
Metoda String.valueOf służy do pobrania reprezentacji String obiektu parametru.
(String) wartość rzutuje wartość obiektu na łańcuch.
Możesz użyć metody String.valueOf, aby uzyskać reprezentację String obiektu bez martwienia się o zerowe odwołania. Jeśli spróbujesz rzucić String na odwołanie o wartości null, otrzymasz NullPointerException.
Pierwsza z nich, tj. String.valueOf
Zwraca łańcuch tylko wtedy, gdy obiekt jest typem reprezentowalnym, który jest typem wartości lub typu String .. W przeciwnym razie zgłasza wyjątek.
W drugim przypadku rzutowanie bezpośrednie może się nie powieść, jeśli obiekt nie jest łańcuchem.
Przykład online.
w String.valueOf (); string jako typ pracy - rzutowanie wszystkich argumentów przekazanych w metodzie valueof () konwertuj na String i tak jak integer.string () konwertuje liczbę całkowitą tylko na łańcuch