String과 String.valueOf 로의 캐스팅의 차이점


88

차이점은 무엇입니까

Object foo = "something";
String bar = String.valueOf(foo);

Object foo = "something";
String bar = (String) foo;

17
어, 그들은 똑같지 않습니다 ... 전혀.
Perception

답변:


149

문자열로 캐스팅하는 것은 객체가 실제로 문자열 인 경우에만 작동 합니다.

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".


14
@AdamStelmaszczyk : 관련성이있는 것이 있는지 의심 스럽습니다. 캐스팅이 약간 더 빠를 수도 있지만 다른 차이점 (널 처리, 다른 유형을 처리 할 수있는 능력)은 사소한 성능 차이보다 훨씬 더 중요합니다.
Joachim Sauer 2013 년

4
이 질문을 조금 더 밀어 붙이기 위해, 호출하는 String.valueOf()것과 obj.toString()? (내 마음에 가장 먼저 떠오르는 것은 null obj.toString()인 경우 예외를 통과 한다는 것 obj입니다.)
Kevin

3
@Kevin : 참조 유형 (일명 "객체")의 경우 유일한 차이점은 null. String.valueOf()JDK 의 구현을 살펴보면 null이 아닌 참조에 대해 수행하는 모든 작업이를 호출하는 것임을 알 수 있습니다 toString().
Joachim Sauer

1
str = String.valueOf(null)Java 7 업데이트 80에서 시도한 결과 NullPointerException.
silver

1
@silver : 사실, 나는 지나치게 단순화했습니다. String.valueOf((Object) null)문자열 "null"을 반환합니다. 리터럴 null로 호출하면 String # valueOf (char [])가 호출되어 null.
Joachim Sauer

19

String.valueOf(foo)foo.toString()메서드를 호출 하고 결과를 막대에 할당합니다 . null 및 형식 안전 작업입니다.

유형이 일치하면 캐스팅은 foobar에 할당합니다 . 그렇지 않으면 표현식에서 ClassCastException.


5
+1 String.valueOf(Object)호출 설명을 위해Object.toString()
Ryan Amos

4

두 경우 모두 동일한 출력 을 생성 String합니다.

Casting 제공된 객체가 아닌 경우 실패 string.


3

캐스팅은 객체가 문자열 유형이어야하며 String.valueOf()다른 유형도 사용할 수 있음을 의미합니다 .


2

String.valueOf 메서드는 매개 변수 개체의 문자열 표현을 가져 오는 데 사용됩니다.

(문자열) 값은 객체 값을 문자열로 캐스트합니다.

String.valueOf 메서드를 사용하여 null 참조에 대한 걱정없이 개체의 문자열 표현을 가져올 수 있습니다. null 참조에서 String을 캐스팅하려고하면 NullPointerException이 발생합니다.


1
final Object obj = null;
final String strValOfObj = String.valueOf(obj);
final String strCastOfObj = (String) obj;
if (strValOfObj == null) System.out.println("strValOfObj is null");
if (strCastOfObj == null) System.out.println("strCastOfObj is null");

출력 :strCastOfObj is null



0

String.valueOf ();에서 작업 typecasting으로 문자열 valueof () 메서드에 전달 된 모든 인수는 문자열로 변환되고 integer.string ()과 마찬가지로 정수를 문자열로만 변환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.