1. আদিম প্রকারের তালিকা

জাভা 8 মৌলিক আদিম প্রকার আছে. এগুলিকে আদিম বলা হয় কারণ এই ধরণের মানগুলি বস্তু নয় এবং সরাসরি ভেরিয়েবলের ভিতরে সংরক্ষণ করা হয়।

এখানে এই ধরনের সম্পর্কে কিছু সংক্ষিপ্ত তথ্য সহ একটি টেবিল রয়েছে:

টাইপ
বাইটে আকার
মান পরিসীমা ডিফল্ট মান বর্ণনা
byte 1 -128.. 127 0 ক্ষুদ্রতম পূর্ণসংখ্যার ধরন হল একক বাইট
short 2 -32,768.. 32.767 0 সংক্ষিপ্ত পূর্ণসংখ্যা, দুই বাইট
int 4 -2*10 9 .. 2*10 9 0 পূর্ণসংখ্যা, 4 বাইট
long 8 -9*10 18 .. 9*10 18 0L দীর্ঘ পূর্ণসংখ্যা, 8 বাইট
float 4 -10 38 .. 10 38 0.0f ফ্লোটিং-পয়েন্ট নম্বর, 4 বাইট
double 8 -10 308 .. 10 308 0.0d ডাবল-নির্ভুল ফ্লোটিং পয়েন্ট নম্বর, 8 বাইট
boolean 1 true,false false বুলিয়ান টাইপ (শুধুমাত্র trueএবং false)
char 2 0.. 65.535 '\u0000' অক্ষর, 2 বাইট, সব 0 এর থেকে বড়
ডিফল্ট মান

উপায় দ্বারা, এখানে একটি গুরুত্বপূর্ণ nuance আছে. আপনি যদি একটি ইনস্ট্যান্স ভেরিয়েবল (ক্ষেত্র) বা একটি স্ট্যাটিক ক্লাস ভেরিয়েবল ঘোষণা করেন এবং অবিলম্বে এটিতে কোনো মান নির্ধারণ না করেন, তাহলে এটি একটি ডিফল্ট মান দিয়ে শুরু করা হয় । টেবিল এই মানগুলির একটি তালিকা উপস্থাপন করে।

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

তবে আসুন আদিম প্রকারগুলিতে ফিরে আসি এবং সেগুলিকে আরও ঘনিষ্ঠভাবে দেখে নেওয়া যাক।



2. পূর্ণসংখ্যার ধরন

জাভাতে 4টি পূর্ণসংখ্যার ধরন রয়েছে: byte, short, intএবং long. তারা তাদের আকার এবং তারা সংরক্ষণ করতে পারেন মান পরিসীমা ভিন্ন.

intটাইপ

সবচেয়ে বেশি ব্যবহৃত হয় intপ্রকার। নামটি int eger (সম্পূর্ণ সংখ্যা) শব্দ থেকে এসেছে। কোডের সমস্ত পূর্ণসংখ্যা আক্ষরিক (সম্পূর্ণ সংখ্যা) হল (যদি সেগুলি একটি , , বা ) intsদিয়ে শেষ না হয় ।LFD

এই ধরনের ভেরিয়েবল থেকে মান নিতে -2,147,483,648পারে +2,147,483,647

এটি অনেক এবং প্রায় প্রতিটি অনুষ্ঠানের জন্য যথেষ্ট। প্রায় প্রতিটি ফাংশন যা একটি সংখ্যা প্রদান করে একটি প্রদান করে int

উদাহরণ:

কোড ব্যাখ্যা
int n = "String".length();
পদ্ধতিটি length()একটি স্ট্রিংয়ের দৈর্ঘ্য প্রদান করে
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
ক্ষেত্রটিতে lengthঅ্যারের দৈর্ঘ্য রয়েছে।

shortটাইপ

টাইপ shortথেকে তার নাম পায় short int. এটিকে প্রায়শই একটি ছোট পূর্ণসংখ্যাও বলা হয় । প্রকারের বিপরীতে int, এর দৈর্ঘ্য মাত্র দুই বাইট এবং সম্ভাব্য মানের পরিসীমা -32,768থেকে +32,767.

তার মানে আপনি এটিতে এক মিলিয়ন নম্বর সংরক্ষণ করতে পারবেন না। বা এমনকি 50,000। এটি জাভাতে সবচেয়ে কম ব্যবহৃত পূর্ণসংখ্যার ধরন। এটি ব্যবহারের মূল অনুপ্রেরণা হ'ল স্মৃতি সংরক্ষণ করা।

ধরুন আপনার এমন একটি পরিস্থিতি রয়েছে যেখানে আপনি আগে থেকেই জানেন যে আপনি এমন মান নিয়ে কাজ করবেন যা কখনই 30,000 এর বেশি হবে না এবং এই মানগুলির লক্ষ লক্ষ থাকবে।

উদাহরণস্বরূপ, ধরা যাক আপনি একটি অ্যাপ্লিকেশন লিখছেন যা অতি-হাই ডেফিনিশন ছবিগুলিকে প্রক্রিয়া করে যা 10প্রতি রঙে -বিট ব্যবহার করে। এবং আপনার ছবিতে এক মিলিয়ন পিক্সেল আছে। এটি এমন একটি দৃশ্য যেখানে ব্যবহার করার সিদ্ধান্ত intবা shortব্যাপার।

longটাইপ

এই টাইপ থেকে এর নাম পাওয়া যায় এবং একে দীর্ঘ পূর্ণসংখ্যাওlong int বলা হয় । প্রকারের বিপরীতে , এটির মানগুলির একটি দুর্দান্তভাবে বিশাল পরিসর রয়েছে: থেকে ।int-9*1018+9*1018

কেন এটি মৌলিক পূর্ণসংখ্যার ধরন নয়?

কারণ জাভা 90-এর দশকের মাঝামাঝি সময়ে আবির্ভূত হয়েছিল, যখন বেশিরভাগ কম্পিউটার 32-বিট ছিল। এর মানে হল যে সমস্ত প্রসেসর 32 বিট সমন্বিত সংখ্যাগুলির সাথে কাজ করার জন্য অপ্টিমাইজ করা হয়েছিল। প্রসেসর 64-বিট পূর্ণসংখ্যার সাথে কাজ করতে পারে, কিন্তু তাদের সাথে অপারেশনগুলি ধীর ছিল।

ফলস্বরূপ, প্রোগ্রামাররা যুক্তিসঙ্গতভাবে intস্ট্যান্ডার্ড পূর্ণসংখ্যার ধরন তৈরি করার সিদ্ধান্ত নিয়েছে এবং longটাইপটি শুধুমাত্র যখনই প্রয়োজন তখনই ব্যবহার করবে।

byteটাইপ

এটি জাভাতে সবচেয়ে ছোট পূর্ণসংখ্যার ধরন, তবে সবচেয়ে কম ব্যবহৃত হয় না। এর নাম, byte, জাভাতে মেমরির ক্ষুদ্রতম ঠিকানাযোগ্য ব্লকের জন্যও শব্দ।

টাইপের জন্য এতগুলি বৈধ মান নেই byte: থেকে -128থেকে +127। কিন্তু সেটা তার শক্তি নয়। টাইপটি byteপ্রায়শই ব্যবহৃত হয় যখন আপনার মেমরিতে একটি বড় ব্লব ডেটা সংরক্ষণ করার প্রয়োজন হয়। s এর একটি অ্যারে byteএই উদ্দেশ্যে আদর্শ।

ধরুন আপনাকে কোথাও একটি ফাইল কপি করতে হবে।

আপনাকে ফাইলের বিষয়বস্তু প্রক্রিয়া করার দরকার নেই: আপনি শুধু মেমরির একটি এলাকা (বাফার) তৈরি করতে চান, এতে ফাইলের বিষয়বস্তু অনুলিপি করতে চান এবং তারপর সেই ডেটা বাফার থেকে অন্য ফাইলে লিখতে চান। একটি byteঅ্যারে আপনি এই জন্য কি প্রয়োজন.

মনে রাখবেন যে একটি অ্যারে ভেরিয়েবল শুধুমাত্র মেমরির একটি এলাকার একটি রেফারেন্স সংরক্ষণ করে। যখন ভেরিয়েবলটি কোন পদ্ধতিতে পাস করা হয়, শুধুমাত্র মেমরি ঠিকানাটি পাস করা হয়। মেমরি ব্লক নিজেই অনুলিপি করা হয় না.

byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
   int size = sourceFile.read(buffer); // Read data from a file into a buffer
   destFile.write(buffer, 0, size); // Write data from the buffer to a file

   // Stop copying if the buffer is not full
   if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();


3. বাস্তব প্রকার

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

কিছু সহায়ক তথ্য:

সংখ্যা লেখার জন্য প্রতিটি দেশের নিজস্ব মান আছে (আশ্চর্য!)

অনেক লোক দশমিক বিভাজক হিসাবে হাজার এবং কমা আলাদা করার জন্য পিরিয়ড ব্যবহার করতে অভ্যস্ত: উদাহরণস্বরূপ, তারা লিখবে one million ones and 153 thousandthsহিসাবে 1.000.000,153। কিন্তু মার্কিন যুক্তরাষ্ট্রে, যেখানে জাভার নির্মাতারা বসবাস করতেন, একটি ভিন্ন মান গৃহীত হয়েছিল:1000000.153

জাভাতে দুটি ফ্লোটিং-পয়েন্ট আদিম প্রকার রয়েছে: doubleএবং float.

আমরা আগেই বলেছি, এই ধরনেরগুলির একটি খুব নির্দিষ্ট অভ্যন্তরীণ বিন্যাস রয়েছে: প্রকৃতপক্ষে, এই ধরনের প্রতিটি ভেরিয়েবলের ভিতরে একটি সংখ্যা নয়, দুটি:

উদাহরণস্বরূপ, ভাসমান-বিন্দু সংখ্যা 987654.321হিসাবে উপস্থাপন করা যেতে পারে । তারপর মেমরিতে এটি দুটি সংখ্যা হিসাবে উপস্থাপন করা হবে ( ম্যান্টিসা , অর্থাত্ সংখ্যার উল্লেখযোগ্য অংশ) এবং ( সূচক , অর্থাত্ দশের একটি শক্তি)0.987654321*1069876543216

floatটাইপ

টাইপের নাম ফ্লোট ing-পয়েন্ট নম্বরfloat থেকে এসেছে । এই ধরনের আকার বেশ ছোট — মাত্র 4 বাইট (32 বিট) — কিন্তু এটি থেকে মান সংরক্ষণ করতে পারে । ম্যান্টিসার প্রতিনিধিত্ব করার জন্য 24 বিট এবং সূচকের জন্য 8 বিট বরাদ্দ করা হয়েছে। এই ধরনের শুধুমাত্র 8 উল্লেখযোগ্য সংখ্যা সংরক্ষণ করতে সক্ষম.-3.4*10383.4*1038

intএই পদ্ধতিটি একই 4 বাইট ব্যবহার করার সময় একটি থেকে অনেক বড় সংখ্যা সংরক্ষণ করা সম্ভব করে তোলে । কিন্তু তা করার জন্য, আমরা নির্ভুলতা বলি। কারণ মেমরির কিছু অংশ ম্যান্টিসা সঞ্চয় করে, এই ভেরিয়েবলগুলি কেবলমাত্র 6-7 দশমিক স্থান সংরক্ষণ করে এবং বাকিগুলি বাতিল করা হয়।

উদাহরণ:

কোড মান
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

আপনি দেখতে পাচ্ছেন, এই ধরনের প্রধান ত্রুটি হল উল্লেখযোগ্য সংখ্যার খুব কম সংখ্যা, এবং অষ্টম সংখ্যার সাথে সাথে নির্ভুলতা হারানো। তাই floatজাভা প্রোগ্রামারদের মধ্যে টাইপটি খুব একটা জনপ্রিয় নয়।

doubleটাইপ

টাইপ doubleহল স্ট্যান্ডার্ড ফ্লোটিং-পয়েন্ট টাইপ। নামটি এসেছে দ্বিগুণ নির্ভুল ফ্লোটিং-পয়েন্ট নম্বর থেকে । সমস্ত বাস্তব আক্ষরিক doubleডিফল্ট s হয়.

এই ধরনের মেমরির 8 বাইট (64 বিট) নেয় এবং থেকে মান সংরক্ষণ করতে পারে । জানার একটি গুরুত্বপূর্ণ বিষয় হল যে 53টি বিট ম্যান্টিসার জন্য বরাদ্দ করা হয়েছে, বাকি 11টি এক্সপোনেন্টের জন্য।-1.7*103081.7*10308

এটি 15-17টি উল্লেখযোগ্য সংখ্যা সংরক্ষণ করার অনুমতি দেয়।

উদাহরণ:

কোড মান
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

এই নির্ভুলতা, বিশেষত প্রকারের সাথে তুলনা করে float, নির্ধারক: বাস্তব সংখ্যা সহ সমস্ত অপারেশনের 99% doubleটাইপ ব্যবহার করে সঞ্চালিত হয়।

11বিটগুলি সূচকের জন্য বরাদ্দ করা হয়, যার মানে আপনি দশ থেকে থেকে -323( +308এটি থেকে দুটির পাওয়ার -1024) +1023সঞ্চয় করতে পারেন। টাইপ doubleসহজেই দশমিক বিন্দুর পরে শত শত শূন্য সহ একটি সংখ্যা সংরক্ষণ করতে পারে:

কোড মান
double a = 2E-300 * 3E+302
600.0


4. অনন্ত

ফ্লোটিং-পয়েন্ট সংখ্যার আরেকটি আকর্ষণীয় বৈশিষ্ট্য রয়েছে: তারা অসীমতা নির্দেশ করে একটি বিশেষ মান সঞ্চয় করতে পারে । এবং আপনি ইতিবাচক অসীম এবং নেতিবাচক অসীম প্রতিনিধিত্ব করতে পারেন ।

উদাহরণ:

কোড বিঃদ্রঃ
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

যদি অসীমকে একটি সংখ্যা দ্বারা গুণ করা হয়, আপনি অসীম পাবেন। যদি আপনি অসীম একটি সংখ্যা যোগ করেন, আপনি অসীম পাবেন. যে সুপার সুবিধাজনক.

সংখ্যা নয় ( NaN)

ইনফিনিটি জড়িত যেকোনো অপারেশন ইনফিনিটি লাভ করে। ভাল, অধিকাংশ কিন্তু সব না.

ফ্লোটিং-পয়েন্ট সংখ্যা আরেকটি বিশেষ মান সঞ্চয় করতে পারে NaN: এটি N ot a N umber (কোন সংখ্যা নয়) এর জন্য সংক্ষিপ্ত।

গণিতে, আপনি যদি অসীমকে অসীম দ্বারা ভাগ করেন, ফলাফলটি অনির্ধারিত।

কিন্তু, জাভাতে, যদি আপনি অসীমকে অসীম দ্বারা ভাগ করেন, ফলাফলটি হয় NaN

উদাহরণ:

কোড বিঃদ্রঃ
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

NaNফলন সঙ্গে কোনো অপারেশন NaN.



5. charপ্রকার

জাভার আদিম প্রকারের মধ্যে , একটি বিশেষ মনোযোগের দাবি রাখে: charপ্রকার। এর নামটি এসেছে char acter শব্দ থেকে , এবং টাইপটি নিজেই অক্ষর সংরক্ষণ করতে ব্যবহৃত হয়।

অক্ষর কি স্ট্রিং তৈরি করা হয়, তাই না? স্ট্রিং অক্ষর একটি অ্যারে হয়.

কিন্তু তার চেয়েও মজার ব্যাপার হল যে charটাইপটিও একটি সংখ্যাসূচক প্রকার ! এটি একটি দ্বৈত উদ্দেশ্য টাইপ, তাই কথা বলতে.

বাস্তবতা হল charটাইপ আসলে অক্ষর নয়। পরিবর্তে, এটি ইউনিকোড এনকোডিং থেকে অক্ষর কোড সংরক্ষণ করে। প্রতিটি অক্ষর একটি সংখ্যার সাথে মিলে যায়: অক্ষরের সংখ্যাসূচক কোড।

প্রতিটি charভেরিয়েবল মেমরিতে দুটি বাইট দখল করে ( shortটাইপ হিসাবে একই)। কিন্তু shortটাইপের বিপরীতে, charপূর্ণসংখ্যার ধরনটি স্বাক্ষরবিহীন এবং 0এটি থেকে মান সংরক্ষণ করতে পারে 65,535

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

ইউনিকোড

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

জাভাতে আদিম প্রকার

একটি ভেরিয়েবলের মান নির্ধারণের বিভিন্ন উপায় রয়েছে char

কোড বর্ণনা
char a = 'A';
ভেরিয়েবলে aল্যাটিন অক্ষর থাকবে A
char a = 65;
ভেরিয়েবলে aল্যাটিন অক্ষর থাকবে A। এর কোড হল 65
char a = 0x41;
ভেরিয়েবলে aল্যাটিন অক্ষর থাকবে A
এর কোড হল 65, যা 41হেক্সাডেসিমেল সিস্টেমে সমান।
char a = 0x0041;
ভেরিয়েবলে aল্যাটিন অক্ষর থাকবে A
এর কোড হল 65, যা 41হেক্সাডেসিমেল সিস্টেমে সমান।
দুটি অতিরিক্ত শূন্য কিছুই পরিবর্তন করে না।
char a = '\u0041';
ভেরিয়েবলে aল্যাটিন অক্ষর থাকবে A
কোড দ্বারা একটি অক্ষর সংজ্ঞায়িত করার আরেকটি উপায়।

প্রায়শই, লোকেরা কেবল উদ্ধৃতি চিহ্নগুলিতে অক্ষরটি নির্দেশ করে (টেবিলের প্রথম সারির মতো)। যে বলে, শেষের পদ্ধতিটিও জনপ্রিয়। এর সুবিধা হল এটি স্ট্রিং ব্যবহার করা যেতে পারে।

এবং আমরা যেমন বলেছি, charটাইপটিও একটি পূর্ণসংখ্যার ধরন, তাই আপনি এরকম কিছু লিখতে পারেন:

কোড কনসোল আউটপুট
char a = 'A';
a++;
System.out.println(a);
ল্যাটিন অক্ষর Bপর্দায় প্রদর্শিত হবে।
কারণ :
A--- 65
B_66
C67

charএস সঙ্গে কাজ

প্রত্যেকটি charপ্রথমে একটি সংখ্যা (অক্ষর কোড), এবং তারপর একটি অক্ষর। আপনি যদি একটি অক্ষর কোড জানেন, আপনি সবসময় আপনার প্রোগ্রামে অক্ষর পেতে পারেন. উদাহরণ:

কোড কনসোল আউটপুট
char c = (char) 1128;
System.out.println(c);

Ѩ

স্ট্যান্ডার্ড কোড

এখানে সবচেয়ে সুপরিচিত অক্ষর কোড আছে:

চরিত্র কোড
0, 1, 2, ...9 48, 49, 50, ...57
a, b, c, ...z 97, 98, 99, ...122
A, B, C, ...Z 65, 66, 67, ...90


6. booleanপ্রকার

এবং শেষ আদিম প্রকার হল boolean.

আপনি ইতিমধ্যে জানেন, এটি শুধুমাত্র দুটি মান নিতে পারে: trueএবং false.

এবং এর সাথে, আপনি ইতিমধ্যেই জানেন যে এই ধরণের সম্পর্কে যা জানার আছে।