বুলিয়ান অবজেক্টটিকে জাভাতে স্ট্রিংয়ে রূপান্তর করার সর্বোত্তম পন্থা


108

আমি বুলিয়ানকে স্ট্রিং টাইপে রূপান্তর করার চেষ্টা করছি ...

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

অথবা

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

উপরের কোনটি আরও দক্ষ হবে?


আপনি কি এই দুটি পদ্ধতির উত্স কোডটি দেখেছেন ?
কিট আছে - অ্যানি-মৌসে

1
আমি পছন্দ ""+b। এটির ধীর তবে বিকাশকারীর পক্ষে আরও দক্ষ। আপনি যদি শীর্ষে পারফরম্যান্স চান তবে আপনি সরাসরি বাইটবফার / থেকে ডেটা লিখতে পারেন, অর্থাৎ স্ট্রিংয়ের সাথে আপনি যা করেন তা পরিবর্তন করতে পারেন যাতে আপনার এটির প্রয়োজন হয় না।
পিটার লরি

এছাড়াও, আপনি যদি এর nullমতো আচরণ করতে চান তবে আপনি falseব্যবহার করতে পারেনString.format("%b", b)
ZhekaKozlov

উত্তর:


145

আমি মনে করি না যে তাদের মধ্যে কোনও উল্লেখযোগ্য পারফরম্যান্সের পার্থক্য থাকবে, তবে আমি প্রথম পদটিকে পছন্দ করব।

আপনি যদি একটি থাকে তাহলে Booleanরেফারেন্স, Boolean.toString(boolean)নিক্ষেপ করা হবে NullPointerExceptionযদি আপনার রেফারেন্স nullbooleanপদ্ধতিতে পাস করার আগে রেফারেন্সটি আনবক্সড হিসাবে ।

যদিও 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
পরীক্ষার স্নিপেটের জন্য ১!
গৌরব

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

আপনার কোডটি সঠিকভাবে ফর্ম্যাট করার চেষ্টা করুন এবং কিছু ব্যাখ্যা দেওয়ার জন্য।
Helloflash

3

এটি যদি "সত্য" বা "সত্য" না দিয়ে স্থির "সত্য" মান অর্জনের উদ্দেশ্যে হয় তবে আপনি এটি ব্যবহার করতে পারেন:

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

1

আপনি যদি এটির জন্য একটি দ্রুত উপায় সন্ধান করছেন, উদাহরণস্বরূপ ডিবাগিং, আপনি কেবল বুলিয়ানটিতে একটি খালি স্ট্রিং সংশ্লেষ করতে পারেন:

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

তবে আমি দৃ strongly়ভাবে উত্পাদন ব্যবহারের জন্য অন্য পদ্ধতি ব্যবহার করার পরামর্শ দিচ্ছি। এটি একটি সাধারণ দ্রুত সমাধান যা ডিবাগিংয়ের জন্য কার্যকর।


আপনি কেন দয়া করে উত্পাদন ব্যবহারের জন্য ব্যবহারের পরামর্শ দিচ্ছেন না তা বিস্তারিতভাবে বলতে পারেন? এটি কিছু পরিস্থিতিতে ব্যর্থ হতে পারে?
অলস্যাব

@ লাজিভ্যাব সমস্ত সততার সাথে আমার কোনও ধারণা নেই! আমি আর জাভা লিখি না তবে আমি অনুমান করতে পারি এটি এমন কিছু ছিল যা আমি শুনেছিলাম। আমি গত কয়েক বছর যাবত অন্যান্য ভাষায় প্রোগ্রামিং করছি তবে কেন এটি ব্যবহার করে এটির ক্ষতি হতে পারে তা দেখতে পাচ্ছি না। এছাড়া 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";
    }

সুতরাং উভয় পদ্ধতি সমান দক্ষ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.