Hi guys!
ဒီနေ့ကျနော်ပြောပြပေးမှာက StringBuilder class အကြောင်းပါ။
StringBuilder class ကနာမ်မည်အတိုင်း string တွေကို build လုပ်ပေးပါတယ်။ String class နဲ့မတူတာက String မှာကြ သူက immutable ဖြစ်ပါတယ်။ ဆိုလိုချင်တာက create လုပ်ထားတဲ့ string တခုကို String class မှာပါတဲ့ method တွေနဲ့ character တွေကို lower and upper case ပြောင်းတာတို့ character တွေဖြတ်ထုတ်ပြစ်တာတို့ စတာတွေ လုပ်တဲ့အခါကြရင် မူရင်း string က ပြောင်းလဲသွားမှာမဟုတ်ပါဘူး။ နောက်ထပ် String အသစ်ကိုပဲ return ပြန်ပေးမှာပါ။အိုကေ အဲ့တာလေးစမ်းကြည့်ရအောင်။
source code:
အပေါ်က source code မှာဆိုရင် str ကို toUpperCase()
နဲ့သုံးပြီး ပြောင်းထားပေမယ့်လည်း မူရင်း str variable ကတော့ တန်ဖိုးပြောင်းသွားချင်းမရှိပါဘူး။ uppercase ပြောင်းထားတဲ့ string ကိုသိမ်းမယ်ဆိုရင်တော့ နောက်ထပ် variable အသစ်လိုပါလိမ့်မယ်။ ဘယ်လိုလုပ်လုပ် မူရင်း value ကိုပြောင်းလဲလို့မရတာမျိုးကို immutable ဖြစ်တယ်လို့ခေါ်ကြပါတယ်။
StringBuilder မှာကြတော့ mutable ဖြစ်ပါတယ်။ ဆိုလိုတာက မူရင်း string ကို တခုခု ပြောင်းလိုက်တာနဲ့ အဲ့ string ကို reference လုပ်ထားတဲ့ variable တွေရဲ့တန်ဖိုးတွေအကုန် ပြောင်းမှာပါ။ အဲ့အကြောင်းအောက်မှာဆက်ပြောပေးပါမယ်။ အဲ့တာဆို StringBuilder ကို create လုပ်ကြည့်ရအောင်။
create လုပ်နည်း လေးခုရှိပါတယ်။ ပထမတခုက default ပါ။ StringBuilder class ရဲ့ constructor ခေါ်လိုက်ရုံပါပဲ။ သူက capacity 16 ရှိတဲ့ object ကို return ပြန်ပေးမှာဖြစ်လို့ variable ကို ပြန်ခေါ်လိုက်ရင် StringBuilder အလွတ်(ဘာမှ မပါပေမယ့် capacity 16 ခုကိုတော့ယူထားပါတယ်) တခုကို ရလာမှာပါ။
eg code: StringBuilder str = new StringBuilder();
နောက်တနည်းကတော့ capacity ကို argument အနေနဲ့ထည့်ရမှာပါ။ ကျနော်တို့ ထည့်လိုက်တဲ့ capacity အတိုင်း StringBuilder object ထွက်လာမှာပါ။
eg code: StringBuilder str1 = new StringBuilder(20);
နောက်တနည်းကတော့ String ကို argument အနေနဲ့ထည့်ပေးရမှာပါ။ သူကတော့ ကျနော်တို့ထည့်ထားတဲ့ string value ပါတဲ့ StringBuilder object ကို return ပြန်ပေးမှာပါ။
eg code: StringBuilder str2 = new StringBuilder("my string");
နောက်တနည်းကတော့ CharSequence ကို argument အနေနဲ့ထည့်ပေးရမှာပါ။ CharSequence ဆိုတာ String က implements လုပ်ထားတဲ့ interface(interface အကြောင်းလည်းတင်ဖြစ်ဦးမယ်ထင်ပါတယ်) ဖြစ်တာမလို့ အပေါ်က String ကိုထည့်ပြီး create လုပ်တာနဲ့မကွာပါဘူး။အပေါ်ကပြောခဲ့တာတွေကို စမ်းကြည့်ရအောင်ဗျာ။
source code :
အပေါ်က ရှင်းပြထားတာတွေကိုပဲရေးထားတာမလို့ code တွေကို ဖတ်ကြည့်ရင်တော့ နားလည်ကြမယ်လို့ထင်ပါတယ်။
ok, StringBuilder က mutable ဖြစ်တဲ့အကြောင်း ဆက်ရအောင်ဗျာ။
mutable, immutable အကြောင်းကအပေါ်မှာပြောထားပြီးပြီမလို့ example code လေးနဲ့ပဲရှင်းပြပေးပါမယ်။
example code:
class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder person1 = new StringBuilder("Maung"); //create a StringBuilder with defined name
System.out.println("Person 1 is :" + person1); //"Maung"
StringBuilder person2 = person1;
StringBuilder person3 = person1.append(" Maung"); //initialize person2 with the value of changed person1 and it will get "Maung Maung"
System.out.println("Person 3 is :" + person3);
System.out.println("Person 1 is :" + person1); //that appen method also change person1 and 2
System.out.println("Person 2 is :" + person2);
}
}
အပေါ်က code မှာဆိုလို့ရှိရင် person 1 ကို "Maung" ဆိုပြီး StringBuilder အနေနဲ့ initialize လုပ်ထားတာပါ။ ပြီးတော့ person 2 ကိုလည်း person 1 ကိုပဲသုံးပြီး "Maung" အနေနဲ့ပဲ ထည့်ထားတာပါ။ အဲ့တော့ StringBuilder ကို person 1 and person 2 က reference လုပ်နေကြပါတယ်။ အဲ့အထိက ပြဿနာမဖြစ်သေးပါဘူး။ person 3 အတွက် initialize လုပ်တဲ့အခါမှာတော့ person 1 ကို append();
method သုံးပြီး space တခုရယ် "Maung" ရယ်ထပ်ထည့်လိုက်တာကြောင့် person 2 က "Maung Maung" ဖြစ်သွားပေမယ့် အဲ့ StrngBuilder object ကိုမှီခိုနေတဲ့ person 1 နဲ့ person 2 ကလည်းပဲ "Maung Maung" ဆိုပြီးလိုက်ပြောင်းကုန်ကြပါတယ်။
အဲ့တာဆိုရင် StringBuilder က mutable ဖြစ်တဲ့အကြောင်းရယ် StringBuilder ကိုသုံးတဲ့အခါ သတိထားရမှာလေးတွေကို သိလောက်ပြီထင်ပါတယ်။
နောက်မှတွေ့ကြတာပေါ့။ BB
Top comments (0)