स्ट्रिंग और String.valueOf को कास्टिंग के बीच अंतर


88

दोनों के बीच क्या अंतर है

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

तथा

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

17
उह, वे समान नहीं हैं ... बिल्कुल नहीं।
धारणा

जवाबों:


148

स्ट्रिंग के लिए कास्टिंग केवल तभी काम करता है जब ऑब्जेक्ट वास्तव में एक स्ट्रिंग है:

Object reallyAString = "foo";
String str = (String) reallyAString; // works.

यह तब काम नहीं करेगा जब वस्तु कुछ और हो:

Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException

String.valueOf()हालाँकि, जो कुछ भी आप इसे में परिवर्तित करने की कोशिश करेंगे उसे a 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"


13
@AdamStelmaszczyk: मुझे संदेह है कि कोई भी प्रासंगिक है। शायद कास्टिंग थोड़ा तेज़ है, लेकिन अन्य अंतर (अशक्त संभालना, अन्य प्रकारों को संभालने की क्षमता) किसी भी मामूली प्रदर्शन अंतर की तुलना में काफी महत्वपूर्ण हैं जो कि हो सकते हैं।
जोआचिम सॉयर

3
इस सवाल को थोड़ा आगे बढ़ाने के लिए, क्या कॉलिंग String.valueOf()और के बीच कोई महत्वपूर्ण अंतर है obj.toString()? (मेरे दिमाग में आने वाली पहली बात यह है कि obj.toString()एक अपवाद के माध्यम से अगर objअशक्त होगा।)
केविन

3
@ केविन: संदर्भ प्रकारों के लिए (उर्फ "ऑब्जेक्ट") एकमात्र अंतर यह है कि क्या होता है null। यदि आप String.valueOf()अपने JDK के कार्यान्वयन को देखते हैं, तो आप देखेंगे कि यह सब गैर-अशक्त संदर्भों के लिए हैtoString()
जोकिम सॉयर

@JoachimSauer मैंने हमेशा सोचा String.valueOf()था कि एक कलाकार की तुलना में अधिक सुरुचिपूर्ण था। लेकिन अगरString.valueOf() वह सब कुछ करता है जो कास्टिंग करता है, और अधिक, तो क्या कोई कारण है कि कोई एक कलाकार का उपयोग करना क्यों पसंद करेगा? इसे अपदस्थ क्यों नहीं किया गया?
शाहिद एम ज़ुबैर

1
@ सेवर: वास्तव में, मैंने ओवरसाइम्प्लीफाइड किया। String.valueOf((Object) null)स्ट्रिंग "null" लौटाएगा। इसे शाब्दिक रूप nullसे कॉल करना स्ट्रिंग # valueOf (char []) को कॉल करेगा जो वास्तव में एनपीई फेंकता है जब आप इसमें पास होते हैंnull
जोकिम सउर

19

String.valueOf(foo)फू की .toString()विधि को आमंत्रित करता है और बार को परिणाम बताता है । यह अशक्त और सुरक्षित संचालन है।

कास्टिंग अभी असाइन होगी यदि प्रकार मिलान कर रहे हैं, तो बार को फू को । अन्यथा, अभिव्यक्ति एक फेंक देगा ClassCastException


5
+1 समझाने के लिए कि String.valueOf(Object)आक्रमणObject.toString()
रयान एमोस

4

दोनों के मामले में एक ही आउटपुट उत्पन्न करता है String

Casting प्रदान की गई वस्तु के मामले में असफलता नहीं है string.


2

कास्टिंग का मतलब है कि वस्तु को स्ट्रिंग के प्रकार की आवश्यकता है, जबकि String.valueOf()अन्य प्रकार भी ले सकते हैं।


2

String.valueOf पद्धति का उपयोग स्ट्रिंग ऑब्जेक्ट के स्ट्रिंग रिपेंसेशन को प्राप्त करने के लिए किया जाता है।

(स्ट्रिंग) मान स्ट्रिंग के लिए ऑब्जेक्ट वैल्यू कास्ट करता है।

आप अशक्त संदर्भों की चिंता किए बिना किसी वस्तु का स्ट्रिंग प्रतिनिधित्व प्राप्त करने के लिए String.valueOf विधि का उपयोग कर सकते हैं। यदि आप स्ट्रिंग को एक शून्य संदर्भ पर कास्ट करने का प्रयास करते हैं, तो आपको 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 एक स्ट्रिंग केवल तभी लौटाता है जब ऑब्जेक्ट एक प्रतिनिधित्व योग्य प्रकार है जो एक मूल्य प्रकार या एक स्ट्रिंग है .. इसके अलावा अपवाद फेंकता है।

बाद वाले में, आप सीधे कास्टिंग कर रहे हैं जो विफल हो सकता है यदि ऑब्जेक्ट स्ट्रिंग नहीं है।

ऑनलाइन उदाहरण।

http://ideone.com/p7AGh5


किस प्रकार का अपवाद?
योषा अलाय्यूब

0

String.valueOf () में; स्ट्रिंग टाइपिंग के रूप में कार्य सभी मान तर्क () में पारित विधि स्ट्रिंग में कन्वर्ट और पूर्णांक की तरह। स्ट्रिंग () केवल पूर्णांक स्ट्रिंग में परिवर्तित करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.