JavaRush /جاوا بلاگ /Random-SD /شين جو مقابلو: مشق
articles
سطح

شين جو مقابلو: مشق

گروپ ۾ شايع ٿيل
هي مضمونن جو ٻيو آهي مقالن جو مقابلو ڪرڻ لاءِ وقف ٿيل آهي. انهن مان پهرين ڳالهه ٻولهه جي نظرياتي بنياد تي - اهو ڪيئن ڪيو ويندو آهي، ڇو ۽ ڪٿي استعمال ڪيو ويندو آهي. هن آرٽيڪل ۾ اسان سڌو سنئون انگن، شين، خاص ڪيسن، ذيلي ذخيري ۽ غير واضح نقطن جي مقابلي بابت ڳالهائينداسين. وڌيڪ واضح طور تي، هتي آهي جيڪو اسان بابت ڳالهائينداسين:
شين جو مقابلو: مشق - 1
  • اسٽرنگ جو مقابلو: ' ==' ۽equals
  • طريقوString.intern
  • حقيقي پريم جي ڀيٽ
  • +0.0۽-0.0
  • مطلبNaN
  • جاوا 5.0. پيدا ڪرڻ جا طريقا ۽ مقابلي ذريعي ' =='
  • جاوا 5.0. آٽو باڪسنگ / انباڪسنگ: ' =='، ' >=' ۽ ' <=' آبجیکٹ ريپرز لاءِ.
  • جاوا 5.0. اينيم عناصر جو مقابلو (قسم enum)
سو اچو ته شروع ڪريون!

اسٽرنگ جو مقابلو: ' ==' ۽equals

آه، اهي سٽون... سڀ کان عام استعمال ٿيندڙ قسمن مان هڪ آهي، جنهن ۾ تمام گهڻا مسئلا پيدا ٿين ٿا. اصول ۾، اتي انھن جي باري ۾ هڪ الڳ مضمون آهي . ۽ هتي آئون مقابلي جي مسئلن تي رابطو ڪندس. يقينا، تارن کي استعمال ڪندي مقابلو ڪري سگهجي ٿو equals. ان کان علاوه، انهن جي مقابلي ۾ هجڻ گهرجي equals. تنهن هوندي به، اهڙا ذخيرا آهن جيڪي ڄاڻڻ جي لائق آهن. سڀ کان پهريان، هڪجهڙائي واري تار اصل ۾ هڪ واحد اعتراض آهن. اهو آساني سان تصديق ڪري سگهجي ٿو هيٺ ڏنل ڪوڊ هلائڻ سان:
String str1 = "string";
String str2 = "string";
System.out.println(str1==str2 ? "the same" : "not the same");
نتيجو ٿيندو ”ساڳيو“ . جنهن جو مطلب آهي تار جا حوالا برابر آهن. اهو ڪمپلر سطح تي ڪيو ويو آهي، ظاهر آهي ميموري کي بچائڻ لاء. مرتب ڪندڙ اسٽرنگ جو ھڪڙو مثال ٺاھي ٿو، ۽ ھن مثال لاء str1ھڪڙو str2حوالو تفويض ڪري ٿو. بهرحال، اهو صرف ڪوڊ ۾ لفظي طور تي اعلان ڪيل تارن تي لاڳو ٿئي ٿو. جيڪڏھن توھان ٽڪرن مان ھڪڙي تار ٺاھيو، ان جي لنڪ مختلف ھوندي. تصديق - هي مثال:
String str1 = "string";
String str2 = "str";
String str3 = "ing";
System.out.println(str1==(str2+str3) ? "the same" : "not the same");
نتيجو ٿيندو ”ساڳئي نه“ . توهان ڪاپي ڪنسٽرڪٽر استعمال ڪندي هڪ نئون اعتراض پڻ ٺاهي سگهو ٿا:
String str1 = "string";
String str2 = new String("string");
System.out.println(str1==str2 ? "the same" : "not the same");
نتيجو به ”ساڳي ناهي“ . اهڙيء طرح، ڪڏهن ڪڏهن حوالن جي مقابلي ذريعي تارن جو مقابلو ڪري سگهجي ٿو. پر اهو بهتر آهي ته هن تي ڀروسو نه ڪيو وڃي. مان هڪ تمام دلچسپ طريقي سان رابطو ڪرڻ چاهيان ٿو جيڪو توهان کي حاصل ڪرڻ جي اجازت ڏئي ٿو هڪ اسٽرنگ جي نام نهاد معياري نمائندگي - String.intern. اچو ته ان بابت وڌيڪ تفصيل سان ڳالهايون.

String.intern جو طريقو

اچو ته حقيقت سان شروع ڪريون ته ڪلاس Stringهڪ اسٽرنگ پول کي سپورٽ ڪري ٿو. طبقن ۾ بيان ڪيل سڀئي اسٽرنگ لٽريلز، ۽ نه رڳو اھي، ھن پول ۾ شامل ڪيا ويا آھن. تنهن ڪري، طريقو internتوهان کي هن پول مان هڪ تار حاصل ڪرڻ جي اجازت ڏئي ٿو جيڪا موجوده هڪ جي برابر آهي (جنهن تي طريقو سڏيو ويندو آهي intern) جي نقطي نظر کان equals. جيڪڏهن اهڙي قطار پول ۾ موجود نه آهي، ته موجوده هڪ اتي رکيل آهي ۽ ان جي هڪ لنڪ واپس ڪئي وئي آهي. اهڙيءَ طرح، جيتوڻيڪ ٻه برابر اسٽرنگ جا حوالا مختلف آهن (جيئن مٿي ڏنل ٻن مثالن ۾)، ته پوءِ انهن تارن کي ڪال ڪرڻ سان هڪ internئي اعتراض جو حوالو واپس ايندو:
String str1 = "string";
String str2 = new String("string");
System.out.println(str1.intern()==str2.intern() ? "the same" : "not the same");
ڪوڊ جي هن ٽڪري تي عمل ڪرڻ جو نتيجو ٿيندو "ساڳي" . مان نه ٿو چئي سگهان ته اهو هن طريقي سان ڇو ڪيو ويو آهي. طريقو internاصلي آهي، ۽ ايماندار ٿيڻ لاء، مان سي ڪوڊ جي جهنگ ۾ وڃڻ نٿو چاهيان. گهڻو ڪري اهو ڪيو ويو آهي ياداشت جي استعمال ۽ ڪارڪردگي کي بهتر ڪرڻ لاءِ. ڪنهن به صورت ۾، ان کي لاڳو ڪرڻ جي هن خصوصيت جي باري ۾ ڄاڻڻ جي قابل آهي. اچو ته ايندڙ حصي ڏانهن وڃو.

حقيقي پريم جي ڀيٽ

شروع ڪرڻ سان، مان هڪ سوال پڇڻ چاهيان ٿو. تمام سادو. هيٺ ڏنل رقم ڇا آهي - 0.3f + 0.4f؟ ڇو؟ 0.7f؟ اچو ته چيڪ ڪريون:
float f1 = 0.7f;
float f2 = 0.3f + 0.4f;
System.out.println("f1==f2: "+(f1==f2));
نتيجي طور؟ پسند؟ مان به. جن هي ٽڪنڊو پورو نه ڪيو تن لاءِ مان چوندس ته نتيجو اهو نڪرندو...
f1==f2: false
ائين ڇو ٿي رهيو آهي؟... اچو ته هڪ ٻيو ٽيسٽ ڪريون:
float f1 = 0.3f;
float f2 = 0.4f;
float f3 = f1 + f2;
float f4 = 0.7f;
System.out.println("f1="+(double)f1);
System.out.println("f2="+(double)f2);
System.out.println("f3="+(double)f3);
System.out.println("f4="+(double)f4);
جي تبديلي کي نوٽ ڪريو double. اهو ڪيو ويندو آهي وڌيڪ decimal هنڌن جي پيداوار لاء. نتيجو:
f1=0.30000001192092896
f2=0.4000000059604645
f3=0.7000000476837158
f4=0.699999988079071
سختي سان ڳالهائڻ، نتيجو پيش گوئي آهي. جزوي حصو جي نمائندگي هڪ محدود سيريز 2-n استعمال ڪندي ڪيو ويندو آهي، ۽ تنهن ڪري ڪنهن به ترتيب سان چونڊيل نمبر جي صحيح نمائندگي بابت ڳالهائڻ جي ڪا ضرورت ناهي. جيئن ته مثال مان ڏسي سگهجي ٿو، نمائندگي جي درستگي float7 decimal هنڌن تي آهي. سختي سان ڳالهائڻ، نمائندگي کي float 24 بٽ مختص ڪري ٿو مينٽيسا کي. اهڙيء طرح، گهٽ ۾ گهٽ مطلق نمبر جيڪو استعمال ڪندي نمائندگي ڪري سگهجي ٿو float (بغير ڪنهن درجي جي حساب ۾، ڇاڪاڻ ته اسان درستگي بابت ڳالهائي رهيا آهيون) 2-24≈6 * 10-8 آهي. اهو هن قدم سان آهي ته نمائندگي ۾ قدر اصل ۾ وڃو float. ۽ جتان quantization آهي، اتي پڻ هڪ غلطي آهي. تنهن ڪري نتيجو: نمائندگي ۾ انگن کي floatصرف هڪ خاص درستگي سان مقابلو ڪري سگهجي ٿو. مان سفارش ڪندس ته انھن کي ڇھين ڊيسيمل جڳھ (10-6) ڏانھن گول ڪرڻ، يا، ترجيحي طور تي، انھن جي وچ ۾ فرق جي مطلق قدر کي جانچڻ:
float f1 = 0.3f;
float f2 = 0.4f;
float f3 = f1 + f2;
float f4 = 0.7f;
System.out.println("|f3-f4|<1e-6: "+( Math.abs(f3-f4) < 1e-6 ));
هن معاملي ۾، نتيجو حوصلا افزائي آهي:
|f3-f4|<1e-6: true
يقينا، تصوير بلڪل ساڳي قسم سان آهي double. فرق صرف اهو آهي ته 53 بٽ مينٽيسا لاءِ مختص ڪيا ويا آهن، تنهن ڪري، نمائندگي جي درستگي 2-53≈10-16 آهي. ها، مقدار جي قيمت تمام ننڍو آهي، پر اهو اتي آهي. ۽ اهو هڪ ظالمانه مذاق ادا ڪري سگهي ٿو. رستي ۾، JUnit ٽيسٽ لائبريري ۾ ، حقيقي انگن جي مقابلي جي طريقن ۾، سڌائي واضح طور تي بيان ڪئي وئي آهي. اهي. مقابلي واري طريقي ۾ ٽي پيٽرولر شامل آهن - انگ، ان جي برابر هجڻ گهرجي، ۽ مقابلي جي درستگي. رستي ۾، مان هڪ سائنسي شڪل ۾ انگن اکرن سان لاڳاپيل ذيلي ذخيري جو ذڪر ڪرڻ چاهيان ٿو، درجي کي اشارو ڪندي. سوال. 10-6 ڪيئن لکي؟ مشق ڏيکاري ٿو ته 80٪ کان وڌيڪ جواب - 10e-6. ان دوران، صحيح جواب آهي 1e-6! ۽ 10e-6 آهي 10-5! اسان ھڪڙي منصوبي ۾ ھن ريڪ تي قدم رکيو، بلڪل غير متوقع طور تي. هنن ڪافي دير تائين ان غلطي کي ڳولهيو، 20 ڀيرا ثابت قدمن کي ڏٺو، ۽ ڪنهن کي به ان جي درستي تي شڪ جو ڪو به پاڇو نه هو، ايتري قدر جو هڪ ڏينهن اتفاق سان، مستقل 10e-3 ڇپجي ويو ۽ کين ٻه مليا. انگ اکر decimal point کان پوءِ متوقع ٽن بدران. تنهن ڪري، محتاط ٿي! اچو ته اڳتي وڌون.

+0.0 ۽ -0.0

حقيقي انگن جي نمائندگي ۾، سڀ کان وڌيڪ اھم بٽ سائن ان ٿيل آھي. ڇا ٿيندو جيڪڏهن ٻيا سڀئي بٽ 0 آهن؟ انٽيجرز جي برعڪس، جتي اهڙي صورتحال ۾ نتيجو هڪ منفي نمبر هوندو آهي جيڪو نمائندگي جي حد جي هيٺئين حد تي واقع هوندو آهي، هڪ حقيقي انگ جنهن ۾ صرف سڀ کان اهم بٽ 1 تي سيٽ ڪيو ويندو آهي ان جو مطلب آهي 0، صرف هڪ منٽ جي نشاني سان. ان ڪري، اسان وٽ ٻه صفر آهن - +0.0 ۽ -0.0. هڪ منطقي سوال پيدا ٿئي ٿو: ڇا انهن انگن کي برابر سمجهيو وڃي؟ مجازي مشين بلڪل هن طريقي سان سوچي ٿو. بهرحال، اهي ٻه مختلف انگ آهن، ڇاڪاڻ ته انهن سان عملن جي نتيجي ۾، مختلف قدر حاصل ڪيا ويا آهن:
float f1 = 0.0f/1.0f;
float f2 = 0.0f/-1.0f;
System.out.println("f1="+f1);
System.out.println("f2="+f2);
System.out.println("f1==f2: "+(f1==f2));
float f3 = 1.0f / f1;
float f4 = 1.0f / f2;
System.out.println("f3="+f3);
System.out.println("f4="+f4);
... ۽ نتيجو:
f1=0.0
f2=-0.0
f1==f2: true
f3=Infinity
f4=-Infinity
تنهن ڪري ڪجهه حالتن ۾ اهو سمجهه ۾ اچي ٿو ته +0.0 ۽ -0.0 کي ٻن مختلف نمبرن وانگر علاج ڪيو وڃي. ۽ جيڪڏهن اسان وٽ ٻه شيون آهن، جن مان هڪ ۾ فيلڊ +0.0 آهي، ۽ ٻئي ۾ -0.0، انهن شين کي پڻ غير برابر سمجهي سگهجي ٿو. سوال پيدا ٿئي ٿو - توهان ڪيئن سمجهي سگهو ٿا ته انگ غير برابر آهن جيڪڏهن انهن جو سڌو مقابلو هڪ مجازي مشين سان ڏئي ٿو true؟ جواب هي آهي. جيتوڻيڪ مجازي مشين انهن انگن کي برابر سمجهي ٿي، انهن جي نمائندگي اڃا به مختلف آهي. تنهن ڪري، رڳو ڪم ڪري سگهجي ٿو ته نظرن جي ڀيٽ ڪرڻ آهي. ۽ ان کي حاصل ڪرڻ لاءِ، اهڙا طريقا آهن int Float.floatToIntBits(float)۽ ، جيڪي فارم ۽ ترتيب long Double.doubleToLongBits(double)۾ ٿورڙي نمائندگي ڏين ٿا (اڳئين مثال جو تسلسل): intlong
int i1 = Float.floatToIntBits(f1);
int i2 = Float.floatToIntBits(f2);
System.out.println("i1 (+0.0):"+ Integer.toBinaryString(i1));
System.out.println("i2 (-0.0):"+ Integer.toBinaryString(i2));
System.out.println("i1==i2: "+(i1 == i2));
نتيجو ٿيندو
i1 (+0.0):0
i2 (-0.0):10000000000000000000000000000000
i1==i2: false
اهڙيء طرح، جيڪڏهن توهان وٽ +0.0 ۽ -0.0 مختلف نمبر آهن، پوء توهان کي انهن جي بٽ نمائندگي ذريعي حقيقي متغيرن جو مقابلو ڪرڻ گهرجي. لڳي ٿو اسان کي ترتيب ڏنو آهي +0.0 ۽ -0.0. -0.0، بهرحال، رڳو تعجب ناهي. اتي پڻ هڪ اهڙي شيء آهي جيئن ...

NaN قدر

NaNلاء بيٺل آهي Not-a-Number. هي قدر غلط رياضياتي عملن جي نتيجي ۾ ظاهر ٿئي ٿو، چئو، 0.0 کي 0.0 سان ورهائڻ، لامحدوديت سان لامحدود، وغيره. هن قدر جي خصوصيت اها آهي ته اهو پاڻ جي برابر ناهي. اهي.:
float x = 0.0f/0.0f;
System.out.println("x="+x);
System.out.println("x==x: "+(x==x));
... نتيجو ٿيندو ...
x=NaN
x==x: false
اهو ڪيئن ٿي سگهي ٿو جڏهن شين جي مقابلي ۾؟ جيڪڏهن اعتراض جو ميدان برابر آهي NaN، پوء مقابلو ڏيندو false، يعني. شين کي غير مساوي سمجهي وڃڻ جي ضمانت ڏني وئي آهي. جيتوڻيڪ، منطقي طور تي، اسان شايد صرف سامهون چاهيون ٿا. توھان حاصل ڪري سگھوٿا مطلوب نتيجو حاصل ڪرڻ جو طريقو استعمال ڪندي Float.isNaN(float). اهو واپس اچي ٿو trueجيڪڏهن دليل آهي NaN. انهي حالت ۾، مان ساٽ نمائندگي جي مقابلي تي ڀروسو نه ڪندس، ڇاڪاڻ ته اهو معياري نه آهي. شايد اهو ئي ڪافي آهي primitives بابت. اچو ته ھاڻي انھن ذيلي ذخيري ڏانھن وڃو جيڪي جاوا ۾ ورجن 5.0 کان وٺي ظاهر ٿيون آھن. ۽ پهريون نقطو جنهن تي آئون رابطو ڪرڻ چاهيان ٿو

جاوا 5.0. پيدا ڪرڻ جا طريقا ۽ مقابلي ذريعي ' =='

ڊزائن ۾ ھڪڙو نمونو آھي جنھن کي پيداوار جو طريقو سڏيو ويندو آھي. ڪڏهن ڪڏهن ان جو استعمال هڪ تعميراتي استعمال ڪرڻ کان وڌيڪ فائدي وارو آهي. اچو ته توهان کي هڪ مثال ڏيان. مان سمجهان ٿو ته مان اعتراض شيل کي چڱي طرح ڄاڻان ٿو Boolean. هي طبقو بدلجندڙ آهي ۽ صرف ٻه قدرن تي مشتمل ٿي سگهي ٿو. اهو آهي، حقيقت ۾، ڪنهن به ضرورت لاء، صرف ٻه ڪاپيون ڪافي آهن. ۽ جيڪڏھن توھان انھن کي اڳ ۾ ٺاھيو ۽ پوءِ صرف انھن کي واپس ڪريو، اھو ٺاھيندڙ استعمال ڪرڻ کان گھڻو تيز ٿيندو. اهڙو طريقو آهي Boolean: valueOf(boolean). اهو نسخو 1.4 ۾ ظاهر ٿيو. ساڳي پيداوار جا طريقا ورجن 5.0 ۾ Byte, Character, Short, Integerand classes ۾ متعارف ڪرايا ويا Long. جڏهن اهي طبقا لوڊ ڪيا ويندا آهن، انهن جي مثالن جا صفا ٺاهيا ويندا آهن جيڪي بنيادي قدرن جي ڪجهه حدن سان ملن ٿا. اهي سلسلو هن ريت آهن:
شين جو مقابلو: مشق - 2
هن جو مطلب اهو آهي ته طريقو استعمال ڪندي، valueOf(...)جيڪڏهن دليل بيان ڪيل حد اندر اچي ٿو، ساڳيو اعتراض هميشه واپس ڪيو ويندو. شايد اهو رفتار ۾ ڪجهه اضافو ڏئي ٿو. پر ساڳئي وقت، مسئلا اهڙي نوعيت جا پيدا ٿين ٿا ته ان جي تري تائين پهچڻ ڪافي ڏکيو ٿي سگهي ٿو. ان بابت وڌيڪ پڙهو. نظريي ۾، پيداوار جو طريقو valueOfٻنهي Float۽ طبقن ۾ شامل ڪيو ويو آهي Double. انهن جو بيان چوي ٿو ته جيڪڏهن توهان کي نئين ڪاپي جي ضرورت نه آهي، ته اهو بهتر آهي ته هي طريقو استعمال ڪريو، ڇاڪاڻ ته اهو رفتار ۾ اضافو ڏئي سگهي ٿو، وغيره. ۽ ايئن. بهرحال، موجوده (جاوا 5.0) جي عمل ۾، هن طريقي ۾ هڪ نئين مثال ٺاهي وئي آهي، يعني. ان جي استعمال جي رفتار ۾ اضافو ڪرڻ جي ضمانت نه آهي. ان کان علاوه، مون لاء اهو تصور ڪرڻ ڏکيو آهي ته اهو طريقو ڪيئن تيز ٿي سگهي ٿو، ڇاڪاڻ ته قدرن جي تسلسل جي ڪري، اتي ڪيش منظم نه ٿي ڪري سگھجي. سواءِ انٽيجرز جي. منهنجو مطلب، جزوي حصو کان سواء.

جاوا 5.0. آٽو باڪسنگ / انباڪسنگ: ' =='، ' >=' ۽ ' <=' آبجیکٹ ريپرز لاءِ.

مون کي شڪ آهي ته پيداوار جا طريقا ۽ مثال ڪيش شامل ڪيا ويا آهن ريپرز لاءِ integer primitives لاءِ آپريشن کي بهتر ڪرڻ لاءِ autoboxing/unboxing. اچو ته توهان کي ياد ڏيان ته اهو ڇا آهي. جيڪڏهن ڪا شئي لازمي طور تي عمل ۾ شامل هجي، پر هڪ پرائمٽيو ملوث هجي، ته پوءِ هي پرائميٽ خود بخود ڪنهن شئي جي چادر ۾ لپي ويندو آهي. هي autoboxing. ۽ ان جي برعڪس - جيڪڏهن هڪ ابتدائي عمل ۾ شامل ٿيڻ گهرجي، ته پوء توهان اتي هڪ اعتراض شيل کي متبادل ڪري سگهو ٿا، ۽ قيمت خود بخود ان مان وڌايو ويندو. هي unboxing. قدرتي طور، توهان کي اهڙي سهولت لاء ادا ڪرڻو پوندو. خودڪار تبادلي جي عملن کي ايپليڪيشن کي سست ڪري ٿو. بهرحال، اهو موجوده موضوع سان لاڳاپيل ناهي، تنهنڪري اچو ته هن سوال کي ڇڏي ڏيو. سڀ ڪجھ ٺيڪ آھي جيستائين اسان عملن سان ڊيل ڪري رھيا آھيون جيڪي واضح طور تي پرائمري يا شيل سان لاڳاپيل آھن. آپريشن جو ڇا ٿيندو ==؟ اچو ته چئو ته اسان وٽ ٻه شيون آهن Integerجن جي اندر ساڳي قدر آهي. انهن جو مقابلو ڪيئن ٿيندو؟
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println("i1==i2: "+(i1==i2));
نتيجو:
i1==i2: false

Кто бы сомневался... Сравниваются они How an objectы. А если так:Integer i1 = 1;
Integer i2 = 1;
System.out.println("i1==i2: "+(i1==i2));
نتيجو:
i1==i2: true
هاڻي اهو وڌيڪ دلچسپ آهي! جيڪڏهن autoboxing-اي ساڳيا شيون واپس آهن! هي اهو آهي جتي ٽريپ آهي. هڪ دفعو اسان کي اهو معلوم ٿئي ٿو ته ساڳيون شيون واپس ڪيون ويون آهن، اسان اهو ڏسڻ لاء تجربو شروع ڪنداسين ته اهو هميشه صورت آهي. ۽ اسان ڪيترا قدر چيڪ ڪنداسين؟ هڪ؟ ڏهه؟ هڪ سئو؟ گهڻو ڪري اسان پاڻ کي هڪ سو تائين محدود ڪنداسين هر طرف صفر جي چوڌاري. ۽ اسان کي هر جڳهه برابري ملي ٿي. اهو لڳي ها ته سڀ ڪجهه ٺيڪ آهي. بهرحال، ٿورو پوئتي ڏسو، هتي . ڇا توهان اندازو لڳايو آهي ته ڪيچ ڇا آهي؟... ها، آٽو باڪسنگ دوران آبجیکٹ شيل جا مثال پيداواري طريقا استعمال ڪندي ٺاهيا ويندا آهن. اهو چڱي طرح بيان ڪيو ويو آهي هيٺين ٽيسٽ ذريعي:
public class AutoboxingTest {

    private static final int numbers[] = new int[]{-129,-128,127,128};

    public static void main(String[] args) {
        for (int number : numbers) {
            Integer i1 = number;
            Integer i2 = number;
            System.out.println("number=" + number + ": " + (i1 == i2));
        }
    }
}
نتيجو هن طرح ٿيندو:
number=-129: false
number=-128: true
number=127: true
number=128: false
قدرن لاءِ جيڪي ڪيشنگ رينج ۾ اچن ٿا ، هڪجهڙا شيون واپس ڪيون وڃن ٿيون، انهن لاءِ جيڪي ان کان ٻاهر آهن، مختلف شيون واپس ڪيون وڃن ٿيون. ۽ تنهن ڪري، جيڪڏهن ايپليڪيشن جي شيل ۾ ڪٿي پرائميت جي بدران مقابلو ڪيو وڃي، اتي سڀ کان وڌيڪ خوفناڪ غلطي حاصل ڪرڻ جو هڪ موقعو آهي: هڪ سچل هڪ. ڇاڪاڻ ته ڪوڊ تمام گهڻو امڪان پڻ قدرن جي محدود حد تي آزمايو ويندو جنهن ۾ هي غلطي ظاهر نه ٿيندي. پر حقيقي ڪم ۾، اهو يا ته ظاهر ٿيندو يا غائب ٿي ويندو، ڪجهه حسابن جي نتيجن تي منحصر ڪري ٿو. اهڙي غلطي ڳولڻ کان چريو ٿيڻ آسان آهي. تنهن ڪري، مان توهان کي صلاح ڏيندس ته جتي ممڪن هجي آٽو باڪسنگ کان پاسو ڪريو. ۽ اهو نه آهي. اچو ته رياضي کي ياد رکون، 5 هين گريڊ کان وڌيڪ نه. اچو ته عدم مساوات A>=B۽ А<=B. رشتي جي باري ۾ ڇا چئي سگهجي ٿو A۽ B؟ اتي رڳو هڪ شيء آهي - اهي برابر آهن. ڇا توهان متفق آهيو؟ مان سمجهان ٿو ها. اچو ته ٽيسٽ هلون:
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println("i1>=i2: "+(i1>=i2));
System.out.println("i1<=i2: "+(i1<=i2));
System.out.println("i1==i2: "+(i1==i2));
نتيجو:
i1>=i2: true
i1<=i2: true
i1==i2: false
۽ اها منهنجي لاءِ سڀ کان وڏي عجيب ڳالهه آهي. مون کي سمجهه ۾ نه ٿو اچي ته اها خصوصيت ٻوليءَ ۾ ڇو متعارف ڪرائي وئي آهي جيڪڏهن ان ۾ اهڙا تضاد آهن. عام طور تي، مان هڪ ڀيرو ٻيهر ورجائيندس - جيڪڏهن اهو ممڪن آهي ته بغير ڪرڻ ممڪن آهي autoboxing/unboxing، پوء اهو مڪمل طور تي هن موقعي کي استعمال ڪرڻ جي قابل آهي. آخري موضوع جنهن تي مان رابطو ڪرڻ چاهيان ٿو... Java 5.0. ڳڻپيوڪر عنصرن جو مقابلو (اينم ٽائيپ) جيئن توھان ڄاڻو ٿا، ورجن 5.0 کان وٺي جاوا ھڪڙو قسم متعارف ڪرايو آھي جيئن ته enum - enumeration. ڊفالٽ طور ان جا مثال ڪلاس ۾ مثال بيان ۾ نالو ۽ ترتيب نمبر شامل آھن. ان جي مطابق، جڏهن اعلان جو حڪم تبديل ٿئي ٿو، انگن کي تبديل ڪري ٿو. بهرحال، جيئن مون مضمون ۾ چيو آهي ته 'سيريلائيزيشن جيئن آهي' ، اهو مسئلو ناهي. سڀ ڳڻپيوڪر عناصر هڪ واحد ڪاپي ۾ موجود آهن، اهو مجازي مشين جي سطح تي ڪنٽرول آهي. تنهن ڪري، انهن کي سڌو سنئون مقابلو ڪري سگهجي ٿو، لنڪ استعمال ڪندي. * * * شايد اهو سڀ ڪجهه اڄ جي لاءِ آهي عملي طرف اعتراض جي مقابلي کي لاڳو ڪرڻ بابت. شايد مان ڪجهه وڃائي رهيو آهيان. هميشه وانگر، مان توهان جي تبصرن جو منتظر آهيان! في الحال، مون کي موڪل ڏي. توهان جي ڌيان لاء توهان سڀني جي مهرباني! ماخذ سان ڳنڍيو: شين جو مقابلو ڪرڻ: مشق
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION