तुलना ऑपरेटर और लॉजिकल ऑपरेटर — Java
यह क्या है और क्यों?
कल्पना करो कि तुम एक रोबोट हो जो निर्णय लेता है। उदाहरण के लिए: "अगर बाहर बारिश हो रही है, तो छाता ले लो।" या: "अगर मेरे पास 100 रुपये हैं और मुझे आइसक्रीम चाहिए, तो इसे खरीदो।" प्रोग्रामिंग में ऐसे निर्णय लेने में तुलना ऑपरेटर (वे संख्याओं या टेक्स्ट की तुलना करते हैं) और लॉजिकल ऑपरेटर (वे कई शर्तों को एक में जोड़ते हैं) मदद करते हैं।
Java में, जीवन की तरह, हमारे पास प्रश्न होते हैं: "क्या संख्या 10, 5 से बड़ी है?", "क्या दो शब्द समान हैं?", "क्या दो शर्तें एक साथ पूरी होती हैं?" उत्तर हमेशा "हाँ" (true) या "नहीं" (false) होते हैं। यह ट्रैफिक लाइट की तरह है: अगर हरी बत्ती है (true) - चलो, अगर लाल बत्ती है (false) - रुको।
इसकी आवश्यकता क्यों है? इनके बिना कंप्यूटर विभिन्न स्थितियों में खुद निर्णय नहीं ले सकता। उदाहरण के लिए, एक गेम में: अगर खिलाड़ी की जीवन समाप्त हो गई (जीवन == 0), तो "Game Over" दिखाओ। या कैलकुलेटर में: अगर 100 से अधिक संख्या दर्ज की गई, तो चेतावनी दिखाओ। तुलना ऑपरेटर और लॉजिकल ऑपरेटर किसी भी "स्मार्ट" प्रोग्राम व्यवहार की नींव हैं।
Python में, वैसे, सब कुछ बहुत समान है: वहाँ भी ==, !=, >, <, >=, <= और लॉजिकल and, or, not हैं। लेकिन Java में एक महत्वपूर्ण अंतर है: स्ट्रिंग्स (टेक्स्ट) की तुलना == के माध्यम से नहीं, बल्कि एक विशेष कमांड .equals() के माध्यम से की जाती है। हम इस पर विस्तार से चर्चा करेंगे।
व्याख्या के साथ कोड उदाहरण
उदाहरण 1: संख्याओं की तुलना (सरल "बड़ा/छोटा")
// Объявляем переменные с числами
int возрастПети = 12;
int возрастВаси = 14;
// Сравниваем: возраст Пети больше возраста Васи?
boolean петяСтарше = возрастПети > возрастВаси;
System.out.println("Петя старше Васи? " + петяСтарше); // Выведет: false
// Сравниваем: возраст Пети меньше возраста Васи?
boolean петяМладше = возрастПети < возрастВаси;
System.out.println("Петя младше Васи? " + петяМладше); // Выведет: true
// Проверяем на равенство
boolean ониРовесники = возрастПети == возрастВаси;
System.out.println("Они одного возраста? " + ониРовесники); // Выведет: false
// Проверяем на неравенство
boolean разныйВозраст = возрастПети != возрастВаси;
System.out.println("Возраст разный? " + разныйВозраст); // Выведет: true
व्याख्या: हमने संख्याओं के साथ दो वेरिएबल बनाए। ऑपरेटर > जाँचता है कि क्या पहली संख्या दूसरी से बड़ी है। अगर हाँ - मान true, अन्यथा false। ऑपरेटर < - इसके विपरीत। == समानता की जाँच करता है (ध्यान दो: दो बराबर के चिह्न, एक नहीं! एक चिह्न असाइनमेंट है)। != जाँचता है कि संख्याएँ समान नहीं हैं। प्रत्येक तुलना का परिणाम एक लॉजिकल मान true या false होता है, जिसे हम boolean प्रकार के वेरिएबल में संग्रहीत करते हैं।
उदाहरण 2: स्ट्रिंग्स (टेक्स्ट) की तुलना - Python से महत्वपूर्ण अंतर
String имя1 = "Аня";
String имя2 = "Аня";
String имя3 = "Ваня";
// Сравниваем строки через equals (не через ==!)
boolean аняИАняОдинаковы = имя1.equals(имя2);
System.out.println("Имя1 и Имя2 одинаковы? " + аняИАняОдинаковы); // true
boolean аняИВаняОдинаковы = имя1.equals(имя3);
System.out.println("Имя1 и Имя3 одинаковы? " + аняИВаняОдинаковы); // false
// Сравниваем без учёта регистра (большие/маленькие буквы)
String имя4 = "аня";
boolean безУчетаРегистра = имя1.equalsIgnoreCase(имя4);
System.out.println("Аня и аня (без учёта регистра)? " + безУчетаРегистра); // true
// А вот так делать НЕЛЬЗЯ (почему — объясним в ошибках)
boolean опасноСравнение = (имя1 == имя2);
System.out.println("Через ==: " + опасноСравнение); // Может выдать true, но это случайно!
व्याख्या: Java में स्ट्रिंग्स सरल संख्याएँ नहीं हैं, बल्कि जटिल ऑब्जेक्ट हैं। उनमें ऑपरेटर == जाँचता है कि क्या स्ट्रिंग्स मेमोरी में एक ही स्थान पर हैं, न कि क्या उनका टेक्स्ट समान है। इसलिए टेक्स्ट की तुलना के लिए .equals() मेथड का उपयोग किया जाता है। अगर तुम बड़े/छोटे अक्षरों को अनदेखा करके तुलना करना चाहते हो (जैसे, "Аня" और "аня"), तो .equalsIgnoreCase() का उपयोग करो। Python में, वैसे, स्ट्रिंग्स के लिए == का उपयोग किया जा सकता है - वहाँ यह सही ढंग से काम करता है। लेकिन Java में - याद रखो: स्ट्रिंग्स केवल equals के माध्यम से!
उदाहरण 3: लॉजिकल ऑपरेटर - "AND" (&&), "OR" (||), "NOT" (!)
int температура = 25;
boolean солнечно = true;
boolean естьВетер = false;
// Проверяем сложное условие: "Идти гулять, если тепло И солнечно"
boolean можно_гулять = (температура > 20) && солнечно;
System.out.println("Можно гулять? " + можно_гулять); // true (25 > 20 И солнечно = true)
// Проверяем: "Взять куртку, если холодно ИЛИ ветрено"
boolean взятьКуртку = (температура < 15) || естьВетер;
System.out.println("Взять куртку? " + взятьКуртку); // false (НЕ холодно И НЕ ветрено)
// Используем "НЕ": "Если НЕ идет дождь, то идем гулять"
boolean идетДождь = false;
boolean неИдетДождь = !идетДождь; // ! делает false -> true
System.out.println("Дождя нет? " + неИдетДождь); // true
// Сложный пример: "Остаться дома, если холодно И (дождь ИЛИ ветер)"
int температура2 = 10;
boolean дождь = true;
boolean ветер = false;
boolean остатьсяДома = (температура2 < 15) && (дождь || ветер);
System.out.println("Остаться дома? " + остатьсяДома); // true (холодно И дождь)
व्याख्या: लॉजिकल ऑपरेटर गणित और जीवन की तरह काम करते हैं। && (AND) केवल तभी true देता है जब दोनों शर्तें true हों। || (OR) true देता है यदि कम से कम एक शर्त true हो। ! (NOT) मान को उलट देता है: true false बन जाता है, false true बन जाता है। Python में भी यही है, बस शब्दों में लिखा जाता है: and, or, not। Java में प्रतीकों का उपयोग किया जाता है, लेकिन अर्थ बिल्कुल समान है। कोष्ठक क्रम निर्धारित करने में मदद करते हैं: पहले कोष्ठक के अंदर की गणना की जाती है, फिर बाकी।
उदाहरण 4: if-else में उपयोग (वास्तविक निर्णय)
int баллы = 85;
int проходнойБалл = 70;
if (баллы >= проходнойБалл) {
System.out.println("Ты прошёл! Поздравляю!");
} else {
System.out.println("Попробуй ещё раз.")