উত্তর:
জাভা ভাষার স্পেসিফিকেশন থেকে - 15.26.2 যৌগিক অ্যাসাইনমেন্ট অপারেটর ।
ফর্ম একটি যৌগ নিয়োগ অভিব্যক্তি
E1 op= E2সমতূল্যE1 = (T)((E1) op (E2)), যেখানেTপ্রকারE1, যে ব্যতীতE1শুধুমাত্র একবার মূল্যায়ন করা হয়।
সুতরাং a &= b;সমতূল্য a = a & b;।
(কিছু ব্যবহারের ক্ষেত্রে, টাইপ-কাস্টিং ফলাফলের ক্ষেত্রে একটি পার্থক্য তৈরি করে তবে এর মধ্যে একটি bহওয়া দরকার booleanএবং টাইপ-কাস্ট কিছুই করতে পারে না))
এবং, রেকর্ডের জন্য, a &&= b;বৈধ জাভা নয়। কোনও &&=অপারেটর নেই।
অনুশীলনে, এর মধ্যে a = a & b;এবং এর মধ্যে সামান্য অর্থগত পার্থক্য রয়েছে a = a && b;। (যদি bকোনও পরিবর্তনশীল বা ধ্রুবক হয় তবে ফলাফল উভয় সংস্করণের জন্য একই হতে চলেছে There bপার্শ্ব-প্রতিক্রিয়াযুক্ত এমন একটি সবেশন এক্সপ্রেশন হলে কেবল একটি অর্থগত পার্থক্য থাকে the &ক্ষেত্রে, পার্শ্ব-প্রতিক্রিয়া সর্বদা দেখা যায় In &&যদি এটির মান নির্ভর করে তবে এটি ঘটে a))
পারফরম্যান্সের দিক থেকে, বাণিজ্য-মূল্য মূল্যায়নের bব্যয় এবং একটি মূল্য এবং মূল্য এর একটি শাখার ব্যয় aএবং একটি অপ্রয়োজনীয় কার্যভার এড়ানোর সম্ভাব্য সঞ্চয়a । বিশ্লেষণটি সরাসরি-অগ্রসর হয় না, তবে গণনা ব্যয় না করেb ব্যয়টি তুচ্ছ নয়, দুটি সংস্করণের মধ্যে পারফরম্যান্সের পার্থক্যটি বিবেচনার জন্য খুব কম।
জেএলএসের 15.22.2 দেখুন । বুলিয়ান অপারেন্ডগুলির জন্য, &অপারেটর বুলিয়ান, বিটওয়াইজ নয়। &&এবং মধ্যে একমাত্র পার্থক্য&বুলিয়ান অপারেন্ডগুলির for&& এটির জন্য স্বল্প সংক্ষিপ্তসার (অর্থাত প্রথম অপারেন্ড মিথ্যা হিসাবে মূল্যায়ন করলে দ্বিতীয় অপারেন্ডকে মূল্যায়ন করা হয় না)।
সুতরাং আপনার ক্ষেত্রে, যদি bএকটি আদিম হয় a = a && b, a = a & bএবং a &= bএকই জিনিস সব করতে।
এটি সর্বশেষ:
a = a & b;
এটি পরীক্ষা করার জন্য এখানে একটি সহজ উপায়:
public class OperatorTest {
public static void main(String[] args) {
boolean a = false;
a &= b();
}
private static boolean b() {
System.out.println("b() was called");
return true;
}
}
আউটপুট হয় b() was called , অতএব ডান হাতের অপারেন্ড মূল্যায়ন করা হয়।
সুতরাং, অন্যদের দ্বারা ইতিমধ্যে উল্লিখিত হিসাবে, a &= bএকই a = a & b।
আমি বুলিয়ান ব্যবহার করে একই ধরণের পরিস্থিতি পেয়েছি যেখানে আমি বি () এর কলটি এড়াতে চেয়েছিলাম যদি ইতিমধ্যে মিথ্যা থাকে।
এটি আমার পক্ষে কাজ করেছে:
a &= a && b()
a=a&&b()।