জাভাতে বুলিয়ান বনাম বুলিয়ান


195

Integerবনাম intজাভা সম্পর্কে প্রায় আলোচনা আছে । পূর্ববর্তীটির ডিফল্ট মান nullএটি পরে থাকে 0। কিভাবে Booleanবনাম সম্পর্কে boolean?

আমার অ্যাপ্লিকেশনটিতে একটি ভেরিয়েবলের মান 0/ 1মান থাকতে পারে। আমি ব্যবহার করতে চাই boolean/ Booleanএবং ব্যবহার না করতে পছন্দ করি int। আমি কি পরিবর্তে Boolean/ ব্যবহার করতে পারি boolean?


2
সিস্টেম ডিজাইনের কারণে আমি বুলিয়ান বেছে নেব কারণ এটিতে "ব্যবহারকারী এখনও সিদ্ধান্ত নেয়নি" যা "সত্য" বা "মিথ্যা" এর সমান নয়। আমি যদি 100% নিশ্চিত সত্য / মিথ্যা বিকল্পের পক্ষে যথেষ্ট হয় তবে আমি বুলিয়ান আদিম ব্যবহার করতে পারি। ডাটাবেসে নুল বিকল্পটি সাধারণত সমস্যা ছাড়াই উপলব্ধ থাকে (বা কেবলমাত্র পরবর্তী দাবিতে
নূলে

2
জাভাতে বুলিয়ান এবং বুলিয়ানের মধ্যে পার্থক্যটির সঠিক নকল কী? (কারণ জিডব্লিউটি কোনও পার্থক্য করে না)।
ড্যান ড্যাসকলেসকু

উত্তর:


270

হ্যাঁ আপনি এর পরিবর্তে Boolean/ ব্যবহার করতে পারেন boolean

প্রথমটি হ'ল অবজেক্ট এবং দ্বিতীয়টি আদিম ধরণের।

  • প্রথমত, আপনি আরও পদ্ধতি পাবেন যা কার্যকর হবে।

  • দ্বিতীয়টি মেমরির ব্যয় বিবেচনা করে সস্তা The দ্বিতীয়টি আপনাকে আরও অনেক স্মৃতি সঞ্চয় করবে, তাই এটির জন্য যান

এখন আপনার উপায় চয়ন করুন।


70
আপনি "দ্বিতীয়টি আপনাকে আরও অনেক স্মৃতি সঞ্চয় করবে, সুতরাং এটির জন্য যান" হিসাবে এই শব্দটি বানিয়ে ফেলতে পারেন। বুলিয়ান সম্পর্কে দরকারী পদ্ধতিগুলি এর উদাহরণ না দিয়ে বেশিরভাগ ক্ষেত্রেই আহ্বান করা যেতে পারে।
ডিজেক্লেওয়ার্থ

3
আপনি যতক্ষণ না নতুন বুলিয়ান (মান) এর পরিবর্তে বুলিয়ান.ভ্যালুওফ (মান) ব্যবহার করেন ততক্ষণ স্মৃতিচারণের উদ্বেগ হওয়া উচিত নয়।
গ্রেগ কেস

2
জন্য AsyncTask, আপনি কেবল Booleanপরিবর্তে ব্যবহার করতে পারেন boolean
র‌্যাপার

98
এটা লক্ষনীয় একটি বুলিয়ান আসলে 3 পদ ... আছে true, falseএবং nullযেখানে একটি বুলিয়ান যৌক্তিক 2 States আছে ( trueএবং false)
respectTheCode

14
বুলিয়ান trillean হয় :)
Topera

50

Boolean বুলিয়ান আদিম প্রকারটি মোড়ানো । জেডিকে ৫ এবং তারপরের দিকে, ওরাকল (বা ওরাকল তাদের কেনার আগে সূর্য) অটোবক্সিং / আনবক্সিং প্রবর্তন করেছিল , যা আপনাকে মূলত এটি করার অনুমতি দেয়

boolean result = Boolean.TRUE;

অথবা

Boolean result = true; 

যা মূলত সংকলকটি করে,

Boolean result = Boolean.valueOf(true);

সুতরাং, আপনার উত্তরের জন্য, এটি হ্যাঁ।


4
টীকা: আপনি সবসময় নিরাপদে একটি ধার্য করতে পারেন না Booleanএকটি থেকে boolean। যদি আপনার Booleanহয় nullএবং আপনি এটি কোনওটিকে নির্ধারিত করার চেষ্টা করেন boolean, এটি NullPointerExceptionরানটাইমের সময় একটি নিক্ষেপ করবে ।
ডানকান লুক

যদি Booleanকোন শ্রেণি থাকে তবে কেন অন্য বর্গের মানটিকে একই বুলিয়ান ভেরিয়েবলে উল্লেখ করে অন্য মানটি পরিবর্তনের পরেও সর্বদা কেন মিথ্যা হয়? এর পরে কী বলা যায় Booleanযদি আমরা বিভিন্ন উদাহরণের ক্লাস / রেজিস্ট্যান্ট হিসাবে পাস করতে না পারি?
ব্যবহারকারী 924

একটি উত্তর খুঁজে পেয়েছি, আমরা এটি ব্যবহার করতে পারি AtomicBooleanএবং এটি ডিফারেন্স ক্লাস থেকে উল্লেখ করতে পারি
user924

35

আমি কিছুটা সরবরাহিত উত্তরগুলি প্রসারিত করছি (যেহেতু তারা এখন পর্যন্ত প্রোগ্রামিং ভাষা তৈরির দৃশ্যের পিছনে বড় চিত্রের যত্ন নেওয়ার পরিবর্তে একটি বিশেষ ভাষা প্রোগ্রামিংয়ে মনোনিবেশ করে তাদের নিজস্ব "কৃত্রিম পরিভাষা" বা মনোনিবেশ করে) , অর্থাৎ যখন জিনিসগুলি টাইপ-সুরক্ষা বনাম স্মৃতি বিবেচনার ফলে পার্থক্য আসে:

ইন্ট বুলিয়ান নয়

বিবেচনা

    boolean bar = true;      
    System.out.printf("Bar is %b\n", bar);
    System.out.printf("Bar is %d\n", (bar)?1:0);
    int baz = 1;       
    System.out.printf("Baz is %d\n", baz);
    System.out.printf("Baz is %b\n", baz);

আউটপুট সহ

    Bar is true
    Bar is 1
    Baz is 1
    Baz is true

২ য় লাইনে জাভা কোডটি (bar)?1:0ব্যাখ্যা করে যে বার ( বুলিয়ান ) সুস্পষ্টভাবে কোনও int- তে রূপান্তরিত (কাস্ট করা) হতে পারে না । আমি এটিকে জেভিএমের পিছনে বাস্তবায়নের বিশদ বর্ণনা করার জন্য নয়, তবে এটি উল্লেখ করতে চাই যে নিম্ন স্তরের বিবেচনার ক্ষেত্রে (মেমরির আকার হিসাবে) ধরণের সুরক্ষার চেয়ে মানগুলি পছন্দ করতে হবে। বিশেষত যদি সেই ধরণের সুরক্ষা সত্যই / সম্পূর্ণরূপে বুলিয়ান প্রকার হিসাবে ব্যবহার না করা হয় যেখানে চেক আকারে করা হয়

যদি মান {0,1 \ হয় তবে বুলেয়ান প্রকারে কাস্ট করুন, অন্যথায় একটি ব্যতিক্রম ছুঁড়ে দিন।

সব ঠিক যে state 0,1 state <{-2 ^ 31, .., 2 ^ 31 -1 state। ওভারকিলের মতো মনে হচ্ছে, তাই না? প্রকারের সুরক্ষা ব্যবহারকারীর সংজ্ঞায়িত প্রকারগুলিতে সত্যই গুরুত্বপূর্ণ, আদিমদের অন্তর্ভুক্ত inালাইয়ের ক্ষেত্রে নয় (যদিও সর্বশেষে প্রথমটিতে অন্তর্ভুক্ত করা হয়েছে)।

বাইটগুলি কোনও ধরণের বা বিট নয়

মনে রাখবেন যে স্মৃতিতে আপনার পরিবর্তনশীল {0,1 range এর পরিসীমা থেকে এখনও কমপক্ষে একটি বাইট বা একটি শব্দ (নিবন্ধকের আকারের উপর ভিত্তি করে xbit) দখল করবে যদি না বিশেষভাবে যত্ন নেওয়া হয় (উদাহরণস্বরূপ মেমরিতে চমৎকারভাবে প্যাক করা - 8 "বুলিয়ান" বিট 1 বাইট - পিছনে এবং পিছনে)।

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

কীওয়ার্ড বনাম প্রকার

শেষ অবধি, আপনার প্রশ্নটি কীওয়ার্ড বনাম প্রকারের সাথে তুলনা করা । আমি বিশ্বাস করি কেন বা কীভাবে আপনি কীওয়ার্ডগুলি ( আদিম হিসাবে চিহ্নিত " আদিম হিসাবে ) পছন্দ করতে (অন্য সংখ্যার কীওয়ার্ড শ্রেণি ব্যবহার করে সাধারণ যৌগিক ব্যবহারকারী-সংজ্ঞাযোগ্য ক্লাস ) বা অন্য কথায় কার্যকারিতা পাবেন তা ব্যাখ্যা করা গুরুত্বপূর্ণ I

boolean foo = true;

বনাম

Boolean foo = true;

প্রথম "জিনিস" (প্রকার) বাড়ানো যাবে না (উপশ্রেণিত) এবং কারণ ছাড়াই নয়। কার্যকরভাবে আদিম এবং মোড়ানো শ্রেণীর জাভা পরিভাষা সহজেই ইনলাইন ভ্যালুতে অনুবাদ করা যেতে পারে (একটি শিরোনাম বা একটি ধ্রুবক যখন সংস্থাপক দ্বারা সরাসরি প্রতিস্থাপিত হয় যখনই প্রতিস্থাপন করা সম্ভব হয় বা যদি না হয় - তবে মানটি মোড়ানোর ক্ষেত্রে ফলব্যাক)।

তুচ্ছ কারণে অপ্টিমাইজেশন অর্জন করা হয়:

"কম রানটাইম কাস্টিং অপারেশন => আরও গতি।"

এ কারণেই যখন প্রকৃত প্রকারের অনুক্রমটি সম্পন্ন হয় এটি প্রয়োজনীয় (তবে এখনও রূপান্তরিত / intoালাই)

সুতরাং, বুলিয়ান এবং বুলিয়ান মধ্যে পার্থক্য হুবহু সংকলন এবং রানটাইমের মধ্যে (কিছুটা দূরে কিন্তু প্রায় উদাহরণ হিসাবে বনাম গেটক্লাস () )।

অবশেষে, অটোবক্সিং আদিমদের চেয়ে ধীর

জাভা অটোবক্সিং করতে পারে এই বিষয়টি লক্ষ্য করুন কেবল একটি "সিনট্যাকটিক চিনি"। এটি কোনও কিছুর গতি দেয় না, কেবল আপনাকে কম কোড লেখার অনুমতি দেয়। এটাই. প্রকারের তথ্য ধারকটিতে ingালাই এবং মোড়ানো এখনও সঞ্চালিত হয়। পারফরম্যান্সের কারণে গাণিতিকগুলি বেছে নিন যা সর্বদা টাইপ সুরক্ষা বাস্তবায়নের জন্য টাইপ তথ্য সহ শ্রেণীর দৃষ্টান্ত তৈরির অতিরিক্ত গৃহকর্মকে বাদ দেয়। ধরণের সুরক্ষার অভাব হ'ল দাম আপনি কার্যকারিতা অর্জনের জন্য প্রদান করেন। বুলিয়ান-মূল্যবান এক্সপ্রেশন সহ কোডের জন্য সুরক্ষা টাইপ করুন (যখন আপনি কম লিখবেন এবং অতএব অন্তর্নিহিত কোড) অন্যথায় প্রবাহ নিয়ন্ত্রণের জন্য উদাহরণস্বরূপ গুরুত্বপূর্ণ।


16

আপনি বুলিয়ান ধ্রুবকগুলি ব্যবহার করতে পারেন - Boolean.TRUEএবং এর Boolean.FALSEপরিবর্তে 0এবং 1booleanআদিম যদি আপনি পরে থাকেন তবে আপনি টাইপ হিসাবে আপনার পরিবর্তনশীল তৈরি করতে পারেন । এইভাবে আপনাকে নতুন Booleanঅবজেক্ট তৈরি করতে হবে না ।


3

মূলত বুলিয়ান একটি আদিম ডেটা উপস্থাপন করে যেখানে বুলিয়ান একটি রেফারেন্স ডেটা টাইপ উপস্থাপন করে। এই গল্পটি শুরু করা হয় যখন জাভা খাঁটি অবজেক্ট ওরিয়েন্টেড হতে চায় যখন এটি আদিম তথ্য প্রকারের ব্যবহারে আসে তবে এটি র‌্যাপার ক্লাস ধারণাটি সরবরাহ করে।

boolean b1;
Boolean b2;

b1এবং b2একই নয়।


3

একটি পর্যবেক্ষণ: (যদিও এটি পার্শ্ব প্রতিক্রিয়া সম্পর্কে চিন্তা করা যেতে পারে)

বুলিয়ান একটি আদিম হিসাবে হয় হয় বা না বলতে পারেন।

বুলিয়ান একটি বস্তু (এটি হ্যাঁ বা না বা 'জানেন না' অর্থাত নাল উল্লেখ করতে পারে)


1

আপনি বুলিয়ান / বুলিয়ান ব্যবহার করতে পারেন। সরলতা হ'ল উপায়। আপনার যদি সুনির্দিষ্ট এপিআই (সংগ্রহ, স্ট্রিমস ইত্যাদি) প্রয়োজন না হয় এবং আপনি পূর্বেই ধারণা করছেন না যে আপনার এটির প্রয়োজন হবে - এটির প্রাথমিক সংস্করণ (বুলিয়ান) ব্যবহার করুন।

  1. আদিমগুলির সাথে আপনি গ্যারান্টি দেন যে আপনি নাল মানগুলি পাস করবেন না।
    আপনি এরকম ফাঁদে পড়বেন না। নীচের কোডটি নুলপয়েন্টার এক্সসেপশনটি ছুড়ে ফেলেছে (থেকে: বুলিয়ান, শর্তসাপেক্ষ অপারেটর এবং অটোবক্সিং ):

    public static void main(String[] args) throws Exception { Boolean b = true ? returnsNull() : false; // NPE on this line. System.out.println(b); } public static Boolean returnsNull() { return null; }

  2. আপনার কোনও বস্তুর প্রয়োজন হলে বুলিয়ান ব্যবহার করুন, যেমন:

    • বুলিয়ানদের স্ট্রিম,
    • ঐচ্ছিক
    • বুলিয়ানদের সংগ্রহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.