जावा में स्ट्रिंग करने के लिए बूलियन ऑब्जेक्ट को परिवर्तित करने के लिए सबसे अच्छा तरीका


108

मैं बूलियन को स्ट्रिंग प्रकार में बदलने की कोशिश कर रहा हूं ...

Boolean b = true;
String str = String.valueOf(b);

या

Boolean b = true;
String str = Boolean.toString(b);

उपरोक्त में से कौन सा अधिक कुशल होगा?


क्या आपने इन दोनों विधियों के स्रोत कोड को देखा है ?
है क्विट - Anony-Mousse

1
मैं पसंद करता हूं ""+b। डेवलपर के लिए इसकी धीमी लेकिन अधिक कुशल। यदि आप शीर्ष प्रदर्शन चाहते हैं, तो आप डेटा को डायरेक्ट बाइटबफ़र से / को लिख सकते हैं, अर्थात स्ट्रिंग के साथ आप जो भी करते हैं उसे बदल दें ताकि आपको इसकी आवश्यकता न हो।
पीटर लॉरी

इसके अलावा, अगर आप का इलाज करना चाहते हैं nullके रूप में false, आप उपयोग कर सकते हैंString.format("%b", b)
ZhekaKozlov

जवाबों:


145

मुझे नहीं लगता कि उनके बीच कोई महत्वपूर्ण प्रदर्शन अंतर होगा, लेकिन मैं 1 तरीका पसंद करूंगा।

यदि आपके पास एक Booleanसंदर्भ है, Boolean.toString(boolean)तो फेंक देंगे NullPointerExceptionयदि आपका संदर्भ है null। जैसा कि संदर्भ booleanविधि से पारित होने से पहले अनबॉक्स किया गया है।

हालांकि, String.valueOf()स्रोत कोड के रूप में विधि से पता चलता है, स्पष्ट nullजाँच करता है :

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

बस इस कोड का परीक्षण करें:

Boolean b = null;

System.out.println(String.valueOf(b));    // Prints null
System.out.println(Boolean.toString(b));  // Throws NPE

आदिम बूलियन के लिए, कोई अंतर नहीं है।


1
परीक्षण स्निपेट्स के लिए 1!
गौरव

28

यदि आप सुनिश्चित हैं कि आपका मूल्य नहीं है, nullतो आप तीसरे विकल्प का उपयोग कर सकते हैं

String str3 = b.toString();

और इसका कोड जैसा दिखता है

public String toString() {
    return value ? "true" : "false";
}

यदि आप शून्य-सुरक्षित उपयोग करना चाहते हैं String.valueOf(b)जो कोड जैसा दिखता है

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}

जैसा कि आप देख रहे हैं कि यह पहले आपकी वस्तु पर परीक्षण करेगा nullऔर बाद में toString()विधि का आविष्कार करेगा ।


बुलाकर Boolean.toString(b)आह्वान करेंगे

public static String toString(boolean b) {
    return b ? "true" : "false";
}

b.toString()जेवीएम को पहले से अनबॉक्स Boolean करने की आवश्यकता है, booleanजो कि तर्क के रूप में पारित किया जाएगा Boolean.toString(...), जबकि उस क्षेत्र में b.toString()पुन: उपयोग करता है , जो उसके राज्य को धारण करता है , की तुलना में थोड़ा धीमा है ।private boolean valueBoolean


3
public class Sandbox {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Boolean b = true;
        boolean z = false;
        echo (b);
        echo (z);
        echo ("Value of b= " + b +"\nValue of z= " + z);
    }

    public static void echo(Object obj){
        System.out.println(obj);
    } 

}
Result
--------------
true
false
Value of b= true
Value of z= false
--------------

अपने कोड को सही ढंग से प्रारूपित करने और कुछ स्पष्टीकरण देने का प्रयास करें।
हेलोफ्लेश

3

यदि यह "ट्रू" या "ट्रू" के बजाय निरंतर "सही" मान प्राप्त करने के उद्देश्य से है, तो आप इसका उपयोग कर सकते हैं:

Boolean.TRUE.toString();
Boolean.FALSE.toString();

1

यदि आप ऐसा करने का एक त्वरित तरीका खोज रहे हैं, उदाहरण के लिए डिबगिंग, तो आप बस बूल पर एक खाली स्ट्रिंग को समतल कर सकते हैं:

System.out.println(b+"");

हालांकि, मैं उत्पादन उपयोग के लिए किसी अन्य विधि का उपयोग करने की दृढ़ता से सलाह देता हूं। यह एक सरल त्वरित समाधान है जो डीबगिंग के लिए उपयोगी है।


क्या आप कृपया विस्तृत कर सकते हैं कि आप उत्पादन के उपयोग के लिए सिफारिश क्यों नहीं करते? क्या यह कुछ परिदृश्य में विफल हो सकता है?
लाजवब

@lazyvab सभी ईमानदारी में मुझे कोई पता नहीं है! मैं अब जावा नहीं लिखता, लेकिन मैं केवल अनुमान कर सकता हूं कि यह कुछ ऐसा था जिसे मैंने सुना होगा। मैं पिछले कुछ वर्षों से अन्य भाषाओं में प्रोग्रामिंग कर रहा हूं, लेकिन यह नहीं देख पा रहा हूं कि उत्पादन में इसका उपयोग करने से नुकसान क्यों होगा। इसके अलावा System.out.printlnडिबगिंग के लिए भी है, है ना?
jskidd3

1

निर्भर करता है कि आप "कुशल" से क्या मतलब है। प्रदर्शन-वार दोनों संस्करण इसके समान बायोटेक के समान हैं।

$ ./javap.exe -c java.lang.String | grep -A 10 "valueOf(boolean)"
  public static java.lang.String valueOf(boolean);
    Code:
       0: iload_0
       1: ifeq          9
       4: ldc           #14                 // String true
       6: goto          11
       9: ldc           #10                 // String false
      11: areturn


$ ./javap.exe -c java.lang.Boolean | grep -A 10 "toString(boolean)"
  public static java.lang.String toString(boolean);
    Code:
       0: iload_0
       1: ifeq          9
       4: ldc           #3                  // String true
       6: goto          11
       9: ldc           #2                  // String false
      11: areturn

0

यदि आप दोनों विधि का कार्यान्वयन देखते हैं, तो वे समान दिखते हैं।

String.valueOf (ख)

public static String valueOf(boolean b) {
        return b ? "true" : "false";
    }

Boolean.toString (ख)

public static String toString(boolean b) {
        return b ? "true" : "false";
    }

तो दोनों विधियां समान रूप से कुशल हैं।

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