উত্তর:
জাভা ভাষার স্পেসিফিকেশন থেকে - 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()
।