একটি অ্যাসাইনমেন্ট এবং সমতা চেক সহ যদি বিবৃতিটি মিথ্যা হিসাবে মূল্যায়ন করে তবে এটি কেন করবে?


105

কোনও জাভা যদি বিবৃতিতে কাজ করে যখন এটির একটি অ্যাসাইনমেন্ট এবং সমতা চেক- ORডি থাকাকালীন কীভাবে হয় ??

public static void test() {
    boolean test1 = true; 
    if (test1 = false || test1 == false) {
        System.out.println("TRUE");
    } else {
        System.out.println("FALSE");
    }       
}

এই মুদ্রণটি কেন মিথ্যা?


1
দৌড়ে চেক করুন। আপনি মিথ্যা নির্ধারণ করে এবং সত্য নির্ধারণ করে দিলে বুলিয়ান মানটি কী মুদ্রিত তা দেখুন। তারপরে ওআর কীভাবে কাজ করে তা পড়ুন।
প্রতীক

2
আমি বলতে ডিবাগ মোড এই কোডটি প্রকৃত মূল্য দেয় এবং রানিং মোড মিথ্যা মান দেয় ... কেন এটা তাই হয় ??? ... (আমি আমার ব্রেকপয়েন্ট যদি শর্ত আরোপ করা) উপর চাই ...
CoderNeji

test1=false, test1==falseহয় false, false || falseহয় false or falseযা false
জ্যারেড বুড়ো

আমি জানি আপনি পরামর্শ চাইছেন না, তবে নীচের উত্তরগুলি একটি নজির সমস্যা চিহ্নিত করার জন্য, এখানে কয়েকটি অনুশীলন রয়েছে যা আমাকে ঝামেলা এড়াতে সহায়তা করেছে (যখন আমি এগুলি বদ্ধ থাকি): (1) 100% না থাকলে সর্বদা প্রথম বন্ধনী ব্যবহার করুন অন্যান্য বিকাশকারীদের সহায়তা করার জন্য অগ্রাধিকারের কিছু বা সহজ স্বচ্ছতার জন্য। ধরে নিবেন না যে অন্যরা সমস্ত অপারেটরের ক্ষেত্রে অগ্রাধিকারের নিয়মগুলি মনে রাখবে (২) যদি-সাধারণ কাজগুলি-শর্তগুলি ব্যতীত সাধারণভাবে বিভ্রান্তি হ্রাস করতে এ্যাসাইনমেন্টগুলি এড়ানো উচিত। কিছু সাধারণ ব্যতিক্রম রয়েছে (বিশেষত I / O, নেটওয়ার্কিং ইত্যাদির জন্য সহজ চেক সহ)। শুধু আমার দুই সেন্ট।
রিমস্কি

কারণtest1 = true
jono

উত্তর:


189

আপনার ভাবনার মত প্রকাশটি পার্স করা হয়নি। এটা না

(test1=false) || (test1 == false)

যে ক্ষেত্রে ফলাফল হতে পারে true, কিন্তু

test1 = (false || test1 == false)

মান false || test1 == falseঅভিব্যক্তি প্রথম নির্ণয় করা হয়, এবং এটা false, কারণ test1সেট করা হয় trueগণনার মধ্যে যাওয়া।

কারণ এই ভাবে পার্স করা হয় যে প্রাধান্য এর ||যে এর চেয়ে কম ==অপারেটর, কিন্তু নিয়োগ অপারেটর প্রাধান্য বেশী =


2
+1 @ রোহানফর্নান্দো, দয়া করে নোট করুন যে আপনি যদি অ্যাসাইনমেন্টের আশেপাশে বন্ধনী যুক্ত করেন: ((test1 = false) || test1 == false)সামগ্রিক মান হবে true
অরনন জিলকা

1
পার্সিং কেন এমন হয় তার কারণটি লিখুন ... এটি কি অপারেটরদের অগ্রাধিকার আদেশের কারণে?
কনডু

3
@ কনডু এটি একটি যথাযথ ফলোআপ প্রশ্ন, আমি একটি অগ্রাধিকার টেবিলের একটি লিঙ্ক যুক্ত করার জন্য সম্পাদনা করেছি, যা ==উপরে দেখায় যে নীচে ||তবে =নীচে ||
dasblinkenlight

চূড়ান্ত অনুচ্ছেদটি বিভ্রান্তিকর, এই বিবেচনায় যে দ্বিতীয় পার্সিংটি প্রথমের চেয়ে কেন বেছে নেওয়া হয় তা বোঝার জন্য, (সহজেই মনে আছে) নিয়মটি জানার পক্ষে যথেষ্ট যে কোনও অ্যাসাইনমেন্ট অপারেটর (এখানে ||) অ্যাসাইনমেন্টের কম প্রাধান্য রয়েছে । আপেক্ষিক প্রাধান্য ||এবং ==দেখাতে হবে যে পার্সিং শুধুমাত্র প্রাসঙ্গিক না হিসাবে test1 = ((false || test1) == false), যা আমি মনে করি না কেহ যুক্তিসঙ্গতভাবে (প্রণালী দ্বারা যে আপেক্ষিক প্রাধান্য আশা, বা আরো সাধারণভাবে যে না ||, &&সম্পর্ক কম প্রাধান্য আছে, এছাড়াও করা সহজ মনে রাখবেন, যেহেতু সমস্ত সময় ব্যবহৃত হয়)।
মার্ক ভ্যান লিউউয়েন

1
আপেক্ষিক প্রাধান্য @MarcvanLeeuwen ||এবং ==বনাম ||এবং =ব্যাখ্যা দিয়েছে কেন এর (সাধারণ) মামলা থেকে এই আচরণ করবে ভিন্নভাবে a == b || c == d
হারুন ডুফর

83

এটি মূলত একটি অগ্রাধিকারের বিষয়। আপনি ধরে নিচ্ছেন যে আপনার কোডটির সমতুল্য:

if ((test1 = false) || (test1 == false))

... কিন্তু এটা না. এটি আসলে এর সমতুল্য:

if (test1 = (false || test1 == false))

... যা এর সমান:

if (test1 = (false || false))

(কারণ test1এটি trueদিয়ে শুরু করা)

... যা এর সমান:

if (test1 = false)

যা মান নির্ধারণ falseকরার test1অভিব্যক্তি হচ্ছে ফলাফলের সঙ্গে, false

অপারেটর অগ্রাধিকারের একটি দরকারী সারণীর জন্য অপারেটরগুলিতে জাভা টিউটোরিয়ালটি দেখুন ।


2

অপারেটরদের অগ্রাধিকার দেখুন

test1 = false || test1 == falseনিম্নলিখিত পদক্ষেপে অভিব্যক্তি মূল্যায়ন করবে।

পদক্ষেপ: 1- test1 = false || test1 == false // এর অগ্রাধিকার ==সর্বোচ্চ

পদক্ষেপ: 2- test1 = false || false // অপারেটরের ||উচ্চতর প্রাধান্য রয়েছে

ধাপ 3- test1 = false

পদক্ষেপ: 4- false

যেহেতু প্রকাশের বুলিয়ান মানটি মিথ্যা হয়ে যায় o সুতরাং অন্য বিবৃতি কার্যকর করা হচ্ছে।


-11

(test1 = false || test1 == false)মিথ্যা প্রত্যাবর্তন, কারণ উভয়ই মিথ্যা। (test1 = false || test1 == true)এটি সত্য কারণ তাদের মধ্যে একটি সত্য


1
সম্পূর্ণ ভুল. প্রশ্নটি এমন দুটি উচ্চমানের উত্তর পেয়েছে যা ঘটে যা বর্ণনা করে কেন আপনি এমন ভুল তথ্যের সাথে উত্তর দিবেন?
l4mpi

5
এই জাতীয় নিম্ন মানের দুটি উত্তর পৃথকভাবে লিখিত মন্তব্যের প্রাপ্য নয়। আপনি বুঝতে পারছেন যে আপনার উত্তরটি বোকামি, তাই না? যদি তা না হয় তবে জোন এবং ব্লিংকলাইটের দুটি উত্তর মনোযোগ সহকারে পড়ুন।
l4mpi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.