প্রথমত, আমরা কেবল স্থানীয় ভেরিয়েবলগুলি নিয়ে কথা বলছি । কার্যকরভাবে চূড়ান্ত ক্ষেত্রগুলিতে প্রযোজ্য নয়। এটি গুরুত্বপূর্ণ, যেহেতু finalক্ষেত্রগুলির জন্য শব্দার্থবিজ্ঞানগুলি খুব স্বতন্ত্র এবং ভারী সংকলক অপ্টিমাইজেশান এবং মেমরি মডেল প্রতিশ্রুতিগুলির সাপেক্ষে , চূড়ান্ত ক্ষেত্রগুলির শব্দার্থকগুলিতে $ 17.5.1 দেখুন ।
একটি পৃষ্ঠ স্তর finalএবং effectively finalস্থানীয় ভেরিয়েবলের জন্য প্রকৃতপক্ষে অভিন্ন। যাইহোক, জেএলএস দুটির মধ্যে একটি স্পষ্ট পার্থক্য তৈরি করে যা এর মতো বিশেষ পরিস্থিতিতে প্রকৃতপক্ষে বিস্তৃত প্রভাব ফেলে।
গেম
ভেরিয়েবল সম্পর্কে JLS§4.12.4 থেকে final:
একটি ধ্রুবক পরিবর্তনশীল একটি হল finalপরিবর্তনশীল আদিম টাইপ বা টাইপ স্ট্রিং যে একটি সঙ্গে সক্রিয়া করা হয় ধ্রুবক অভিব্যক্তি ( §15.29 )। কোনও চলক একটি ধ্রুবক পরিবর্তনশীল কিনা বা শ্রেণীর সূচনা ( §12.4.1 ), বাইনারি সামঞ্জস্যতা ( §13.1 ), পুনঃব্যবহারযোগ্যতা ( §14.22 ), এবং নির্দিষ্ট অ্যাসাইনমেন্ট ( §16.1.1 ) এর সাথে জড়িত থাকতে পারে ।
যেহেতু intআদিম, ভেরিয়েবল aযেমন ধ্রুবক পরিবর্তনশীল ।
আরও একই অধ্যায়ে থেকে effectively final:
চূড়ান্ত হিসাবে ঘোষণা করা হয় না এমন কিছু পরিবর্তনশীলগুলি কার্যকরভাবে চূড়ান্ত হিসাবে বিবেচিত হয়: ...
সুতরাং এটি যেভাবে বলা হয় তা থেকে এটি স্পষ্ট যে অন্য উদাহরণে ধ্রুবক পরিবর্তনশীল হিসাবে বিবেচিত aহয় না , কারণ এটি চূড়ান্ত নয় , তবে কেবল কার্যকরভাবে চূড়ান্ত।
আচরণ
এখন আমাদের পার্থক্য রয়েছে, এখন কী চলছে এবং কেন আউটপুট আলাদা তা দেখা যাক।
আপনি ? :এখানে শর্তসাপেক্ষ অপারেটর ব্যবহার করছেন , সুতরাং আমাদের এর সংজ্ঞাটি পরীক্ষা করতে হবে। JLS§15.25 থেকে :
দ্বিতীয় এবং তৃতীয় অপারেন্ড এক্সপ্রেশন অনুসারে শ্রেণিবদ্ধ তিন ধরণের শর্তযুক্ত প্রকাশ রয়েছে: বুলিয়ান শর্তসাপেক্ষ এক্সপ্রেশন , সংখ্যা শর্তযুক্ত এক্সপ্রেশন এবং রেফারেন্স শর্তসাপেক্ষ অভিব্যক্তি ।
এই ক্ষেত্রে, আমরা JLS§15.25.2 থেকে একটি সংখ্যার শর্তসাপেক্ষ এক্সপ্রেশন সম্পর্কে কথা বলছি :
একটি সংখ্যার শর্তসাপেক্ষ প্রকাশের ধরণটি নিম্নলিখিত হিসাবে নির্ধারিত হয়:
এবং এটি সেই অংশ যেখানে দুটি কেস আলাদাভাবে শ্রেণিবদ্ধ করা হয়।
কার্যকরভাবে চূড়ান্ত
effectively finalএই নিয়মের সাথে মিলে যাওয়া সংস্করণটি :
অন্যথায়, দ্বিতীয় সংখ্যার প্রচার ( §5.6 ) দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলিতে প্রয়োগ করা হয়, এবং শর্তসাপেক্ষ প্রকাশের ধরণটি দ্বিতীয় এবং তৃতীয় অপারেন্ডগুলির প্রচারিত ধরণ।
কোনটি একই আচরণ যেমন আপনি করছেন 5 + 'd'যেমন int + char, যার ফলশ্রুতি int। JLS§5.6 দেখুন
সংখ্যাসূচক প্রচারটি সংখ্যার প্রসঙ্গে সমস্ত অভিব্যক্তির প্রচারিত ধরণ নির্ধারণ করে। প্রচারিত প্রকারটি এমনভাবে বেছে নেওয়া হয় যে প্রতিটি অভিব্যক্তি প্রচারিত ধরণের ক্ষেত্রে রূপান্তরিত হতে পারে, এবং গাণিতিক ক্রিয়াকলাপের ক্ষেত্রে অপারেশনটি প্রচারিত ধরণের মানগুলির জন্য সংজ্ঞায়িত করা হয়। একটি সংখ্যার প্রেক্ষাপটে প্রকাশের ক্রম সংখ্যার প্রচারের জন্য তাত্পর্যপূর্ণ নয়। নিয়মগুলি নিম্নরূপ:
[...]
এর পরে, নিম্নলিখিত বিধি অনুসারে কিছু অভিব্যক্তিতে প্রারম্ভিক রূপান্তর ( §5.1.2 ) প্রশস্তকরণ এবং সংকীর্ণ আদিম রূপান্তর ( .15.1.3 ) প্রয়োগ করা হয়:
একটি সংখ্যাগত পছন্দ প্রসঙ্গে, নিম্নলিখিত বিধিগুলি প্রয়োগ হয়:
কোনো অভিব্যক্তি ধরনের হয়, তাহলে intহয় একটি ধ্রুবক অভিব্যক্তি নয় ( §15.29 ), তারপর উন্নীত ধরনের int, এবং অন্যান্য অভিব্যক্তি ধরনের নয় intভোগ করতে আদিম রূপান্তর প্রসার করতে int।
তাই সবকিছু উন্নীত করা হয় intযেমন aএকটি হল intইতিমধ্যে। এর আউটপুট ব্যাখ্যা করে 97।
চূড়ান্ত
finalভেরিয়েবল সহ সংস্করণটি এই নিয়মের সাথে মিলেছে:
Operands এক ধরনের হয়, তাহলে Tযেখানে Tহয় byte, shortঅথবা char, এবং অন্যান্য প্রতীক একটি হল ধ্রুবক অভিব্যক্তি ( §15.29 ধরনের) intযার মূল্য ধরনের representable হয় T, তারপর শর্তাধীন মত প্রকাশের প্রকার T।
চূড়ান্ত পরিবর্তনশীল aটাইপ intএবং ধ্রুবক প্রকাশ (কারণ এটি হয় final) হয়। এটি হিসাবে উপস্থাপনযোগ্য char, ফলস্বরূপ ফলাফল টাইপ char। যে আউটপুট সমাপ্ত a।
স্ট্রিং উদাহরণ
স্ট্রিং সমতার সাথে উদাহরণটি একই মূল পার্থক্যের ভিত্তিতে তৈরি হয়, finalভেরিয়েবলগুলি ধ্রুবক প্রকাশ / পরিবর্তনশীল হিসাবে বিবেচিত হয় এবং effectively finalতা হয় না।
জাভাতে, স্ট্রিং ইন্টার্নিং ধ্রুবক মত প্রকাশের উপর ভিত্তি করে, তাই
"a" + "b" + "c" == "abc"
হয় trueপাশাপাশি (আত বাস্তব কোডে এই কনস্ট্রাক্ট ব্যবহার করুন)।
JLS§3.10.5 দেখুন :
তদুপরি, একটি স্ট্রিং আক্ষরিক সর্বদা স্ট্রিং শ্রেণীর একই উদাহরণকে বোঝায়। স্ট্রিং লিটারেলগুলি - বা আরও সাধারণভাবে স্ট্রিংগুলি ধ্রুবক এক্সপ্রেশনগুলির মূল্য ( .215.29 ) - "অভ্যন্তরীণ" হয় যাতে পদ্ধতিটি String.intern( 12.5 ) ব্যবহার করে অনন্য দৃষ্টান্তটি ভাগ করে নেওয়া যায় ।
এটিকে অগ্রাহ্য করা সহজ কারণ এটি প্রাথমিকভাবে আক্ষরিক সম্পর্কে কথা বলছে, তবে এটি আসলে ধ্রুবক প্রকাশের ক্ষেত্রেও প্রযোজ্য।