কী null
?
কি null
কিছু একটি দৃষ্টান্ত?
কোন সেট সম্পর্কিত null
?
এটি কীভাবে স্মৃতিতে উপস্থাপিত হয়?
কী null
?
কি null
কিছু একটি দৃষ্টান্ত?
কোন সেট সম্পর্কিত null
?
এটি কীভাবে স্মৃতিতে উপস্থাপিত হয়?
উত্তর:
নাল কি কোন কিছুর উদাহরণ?
না, কোন ধরণের নেই যা null
একটি instanceof
।
instanceof
RelationalExpression: RelationalExpression instanceof ReferenceType
রান সময়ে, ফল
instanceof
অপারেটরtrue
যদি এর মান RelationalExpression নয়null
এবং রেফারেন্স কাস্ট করা যায়নি ReferenceType একটি উত্থাপন ছাড়াইClassCastException
। অন্যথায় ফলাফল হয়false
।
এর অর্থ এই যে কোনো ধরনের জন্য E
এবং R
যে কোনো জন্য E o
, যেখানে o == null
, o instanceof R
সর্বদা false
।
'নাল' কোন সেট এর সাথে সম্পর্কিত?
একটি বিশেষ নাল টাইপও রয়েছে, এক্সপ্রেশনটির ধরণ
null
, যার কোনও নাম নেই। কারণ নাল টাইপ কোন নাম আছে, এটি একটি ভেরিয়েবল ডিক্লেয়ার করা অসম্ভব নাল করতে টাইপ বা ঢালাই করার নাল প্রকার।null
রেফারেন্স একটি অভিব্যক্তি মাত্র সম্ভব মান নাল প্রকার।null
রেফারেন্স সবসময় কোন রেফারেন্স টাইপ কাস্ট করা যেতে পারে। অনুশীলনে, প্রোগ্রামার নাল টাইপটিকে উপেক্ষা করতে পারে এবং কেবল ভান করে যেnull
এটি কেবল একটি বিশেষ আক্ষরিক যা কোনও রেফারেন্স ধরণের হতে পারে।
নাল কি?
উপরের জেএলএসের উদ্ধৃতি যেমন বলেছে, বাস্তবে আপনি সহজেই ভান করতে পারেন যে এটি "নিছক একটি বিশেষ আক্ষরিক যা কোনও রেফারেন্স ধরণের হতে পারে"।
জাভাতে, null == null
(এটি অন্যান্য ভাষায় সর্বদা হয় না)। আরও মনে রাখবেন যে চুক্তি অনুসারে এরও এই বিশেষ সম্পত্তি রয়েছে (থেকে java.lang.Object
):
public boolean equals(Object obj)
কোনও অ-
null
রেফারেন্স মানের জন্যx
,x.equals(null)
হওয়া উচিতreturn false
।
এটি সমস্ত রেফারেন্স প্রকারের জন্য এটি পূর্বনির্ধারিত মান (ভেরিয়েবলগুলির জন্য )ও রয়েছে:
- প্রতিটি শ্রেণি ভেরিয়েবল, উদাহরণ পরিবর্তনশীল, বা অ্যারের উপাদান তৈরি করা হলে এটি একটি ডিফল্ট মান দিয়ে শুরু করা হয়:
- সমস্ত রেফারেন্স ধরণের জন্য, ডিফল্ট মান
null
।
এটি কীভাবে ব্যবহৃত হয় তা পরিবর্তিত হয়। আপনি ক্ষেত্রগুলিকে অলস সূচনা বলতে সক্ষম করতে এটি ব্যবহার করতে পারেন , যেখানে ক্ষেত্রের null
এটি ব্যবহার না হওয়া অবধি তার প্রাথমিক মান থাকবে, যেখানে এটি "আসল" মান দ্বারা প্রতিস্থাপিত হয়েছে (যা গণনা ব্যয়বহুল হতে পারে)।
অন্যান্য ব্যবহার আছে। আসুন এর থেকে একটি বাস্তব উদাহরণ নেওয়া যাক java.lang.System
:
public static Console console()
রিটার্নস : অন্যথায় সিস্টেম কনসোল, যদি থাকে তবে
null
।
এটি খুব সাধারণ ব্যবহারের প্যাটার্ন: null
কোনও জিনিসের অস্তিত্ব বোঝাতে ব্যবহৃত হয়।
এখানে ব্যবহারের আর একটি উদাহরণ রয়েছে java.io.BufferedReader
:
public String readLine() throws IOException
রিটার্নস :
String
কোনও লাইন-সমাপ্তি অক্ষরগুলি সহ, বাnull
স্ট্রিমের শেষটি পৌঁছে গেছে এমন না করে রেখার বিষয়বস্তু সমেত একটি
তাই এখানে, readLine()
ফিরে আসবে instanceof String
যতক্ষণ না এটা চূড়ান্তভাবে একটি ফেরৎ প্রতিটি লাইনে জন্য, null
শেষ বোঝান। এটি আপনাকে প্রতিটি লাইনের নীচে প্রক্রিয়া করতে দেয়:
String line;
while ((line = reader.readLine()) != null) {
process(line);
}
কেউ এপিআই ডিজাইন করতে পারেন যাতে সমাপ্তির শর্তটি readLine()
ফিরে আসার উপর নির্ভর করে না null
, তবে কেউ দেখতে পারেন যে এই নকশাকে জিনিসগুলি সংক্ষিপ্ত করে তোলার সুবিধা রয়েছে। মনে রাখবেন যে খালি লাইনগুলিতে কোনও সমস্যা নেই, কারণ খালি লাইন "" != null
।
আসুন এবার আরেকটি উদাহরণ নেওয়া যাক java.util.Map<K,V>
:
V get(Object key)
নির্দিষ্ট কীটি ম্যাপ করা হয়েছে এমন মানটি দেয় বা
null
এই মানচিত্রে যদি কীটির জন্য কোনও ম্যাপিং থাকে না তা প্রদান করে।যদি এই মানচিত্রটি
null
মানগুলির অনুমতি দেয় , তবে এর কোনও ফেরতের মানnull
অগত্যা নির্দেশ করে না যে মানচিত্রে কীটির জন্য কোনও ম্যাপিং নেই; এটিও সম্ভব যে মানচিত্রটি স্পষ্টভাবে কীটির মানচিত্রটি ম্যাপ করেnull
।containsKey
অপারেশন এই দুটি মামলা পার্থক্য ব্যবহৃত হতে পারে।
এখানে আমরা কীভাবে null
জিনিসগুলিকে জটিল করে তুলতে পারি তা দেখতে শুরু করি । প্রথম বিবৃতিটি বলে যে কীটি ম্যাপ না করা থাকলে, null
ফিরে আসবে। দ্বিতীয় বিবৃতিতে বলা হয়েছে যে কীটি ম্যাপ করা থাকলেও তাও ফেরত দেওয়া null
যেতে পারে।
বিপরীতে, কীগুলি এবং মানগুলিকে java.util.Hashtable
অনুমতি না দিয়ে জিনিসগুলিকে সরল রাখে null
; এর V get(Object key)
, যদি ফেরত আসে null
, দ্ব্যর্থহীনভাবে মানে কীটি ম্যাপ করা হয়নি।
আপনি বাকি এপিআইগুলি পড়তে পারেন এবং কোথায় এবং কীভাবে null
ব্যবহৃত হয়েছে তা খুঁজে পেতে পারেন । মনে রাখবেন যে এগুলি সর্বদা সেরা অনুশীলনের উদাহরণ নয়।
সাধারণত কথা বলতে গেলে null
তা বোঝাতে বিশেষ মান হিসাবে ব্যবহৃত হয়:
এটি কীভাবে স্মৃতিতে উপস্থাপিত হয়?
জাভাতে? আপনার উদ্বেগের কোনটিই নয়। এবং এটি সবচেয়ে ভালভাবে সেভাবে রাখা হয়েছে।
null
একটি ভাল জিনিস?এটি এখন বর্ডারলাইন সাবজেক্টিভ। কিছু লোক বলে যে null
অনেক প্রোগ্রামার ত্রুটিগুলি এড়ানো যেতে পারে যার কারণ রয়েছে। কেউ কেউ বলেন যে NullPointerException
জাভা জাভের মতো এমন ভাষায় এটি ব্যবহার করা ভাল কারণ আপনি প্রোগ্রামার ত্রুটিগুলিতে দ্রুত ব্যর্থ হবেন। কিছু লোক নাল অবজেক্ট প্যাটার্ন ইত্যাদি null
ব্যবহার করে এড়িয়ে চলে
এটি নিজেই একটি বিশাল বিষয়, তাই অন্য প্রশ্নের উত্তর হিসাবে এটি সর্বোত্তমভাবে আলোচিত।
আমি এটি null
নিজের আবিষ্কারক সিএআর হোয়ারের (চতুর খ্যাতির) একটি উদ্ধৃতি দিয়ে শেষ করব :
আমি এটিকে আমার বিলিয়ন ডলারের ভুল বলছি। এটি
null
১৯65৫ সালের রেফারেন্সের আবিষ্কার ছিল At সেই সময় আমি কোনও অবজেক্ট ওরিয়েন্টেড ল্যাঙ্গুয়েজে (ALGOL ডাব্লু) রেফারেন্সের জন্য প্রথম বিস্তৃত টাইপ সিস্টেমটি ডিজাইন করছিলাম। আমার লক্ষ্যটি নিশ্চিত করা ছিল যে কম্পাইলার দ্বারা স্বয়ংক্রিয়ভাবে চেক করা উচিত, সমস্ত উল্লেখের ব্যবহার একেবারেই নিরাপদ হওয়া উচিত। তবে কোনওnull
রেফারেন্স দেওয়ার প্রলোভনটি আমি প্রতিহত করতে পারিনি , কেবল কারণ এটি কার্যকর করা এত সহজ ছিল। এর ফলে অসংখ্য ত্রুটি, দুর্বলতা এবং সিস্টেম ক্র্যাশ হয়েছে, যা সম্ভবত চল্লিশ বছরে এক বিলিয়ন ডলার ব্যথা এবং ক্ষতির কারণ হয়ে দাঁড়িয়েছে।
এই উপস্থাপনা ভিডিও গভীর যায়; এটি একটি প্রস্তাবিত ঘড়ি।
NIL
1960 সালে এবং সম্ভবত এর আগে এলআইএসপিতে (যেমন ) তে বিদ্যমান ছিল । তবে আমি মনে করি না যে হোয়ার সত্যই সেই উদ্ধৃতিতে নাল রেফারেন্স আবিষ্কার করার দাবি করছেন।
নাল কি কোন কিছুর উদাহরণ?
না তাই সকল ক্লাসে null instanceof X
ফিরে আসবে । (এই ভেবে ভ্রষ্ট হবেন না যে আপনি এমন কোনও ভেরিয়েবলকে বরাদ্দ করতে পারবেন যার প্রকারটি একটি অবজেক্টের ধরণ। কথায় কথায় বলতে গেলে এই কার্যক্রমে একটি অন্তর্নিহিত ধরণের রূপান্তর জড়িত; নীচে দেখুন))false
X
null
'নাল' কোন সেট এর সাথে সম্পর্কিত?
এটি নাল টাইপের একমাত্র এবং একমাত্র সদস্য, যেখানে নাল টাইপটি নীচে সংজ্ঞায়িত করা হয়েছে:
"একটি বিশেষ নাল টাইপও রয়েছে, এক্সপ্রেশন নাল ধরণের, যার কোনও নাম নেই। নাল টাইপের কোনও নাম না থাকায় নাল প্রকারের একটি ভেরিয়েবল ঘোষণা করা বা নাল প্রকারে নিক্ষেপ করা অসম্ভব। নাল নাল প্রকারের একটি অভিব্যক্তির একমাত্র সম্ভাব্য মান রেফারেন্স হয় নাল রেফারেন্সটি সর্বদা যে কোনও রেফারেন্স প্রকারে ফেলে দেওয়া যেতে পারে practice অনুশীলনে, প্রোগ্রামার নাল টাইপটিকে উপেক্ষা করতে পারে এবং কেবল ভান করে যে নালটি কেবল একটি বিশেষ আক্ষরিক যা কোনও হতে পারে রেফারেন্স প্রকার। " জেএলএস 4.1
নাল কি?
উপরে দেখুন. কিছু প্রসঙ্গে null
"অবজেক্ট" বা "অজানা" বা "অনুপলব্ধ" বোঝাতে ব্যবহৃত হয়, তবে এই অর্থগুলি অ্যাপ্লিকেশন নির্দিষ্ট specific
এটি কীভাবে স্মৃতিতে উপস্থাপিত হয়?
এটি বাস্তবায়ন নির্দিষ্ট, এবং আপনি null
খাঁটি জাভা প্রোগ্রামে উপস্থাপনা দেখতে পারবেন না । (তবে null
সমস্ত জাভা বাস্তবায়ন না হলে বেশিরভাগ ক্ষেত্রে শূন্য মেশিনের ঠিকানা / পয়েন্টার হিসাবে প্রতিনিধিত্ব করা হয়))
নাল কি?
এটা কিছুই না.
নাল কি কোন কিছুর উদাহরণ?
না এটি কিছুই না এটি কোনও কিছুর উদাহরণ হতে পারে না।
নাল কিসের সাথে সম্পর্কিত?
কোন সেট নেই
এটি কীভাবে স্মৃতিতে উপস্থাপিত হয়?
যদি কিছু রেফারেন্স এটিকে নির্দেশ করে:
Object o=new Object();
হিপ মেমরিতে নতুন তৈরি করা অবজেক্টকে কিছু স্থান নির্ধারিত করা হয়। এবং ও মেমোরিতে সেই নির্ধারিত স্থানটির দিকে নির্দেশ করবে।
এখন o=null;
এর অর্থ এখন ও অবজেক্টের সেই মেমরি স্পেসের দিকে নির্দেশ করবে না।
নাল কীওয়ার্ডটি একটি আক্ষরিক যা কোনও নাল রেফারেন্স উপস্থাপন করে যা কোনও বস্তুর উল্লেখ করে না । নাল হল রেফারেন্স-টাইপ ভেরিয়েবলের ডিফল্ট মান।
এছাড়াও সম্ভবত একবার দেখুন
জাভা নাল (টিএম)
সি এবং সি ++ এ, "NULL" একটি শিরোনাম ফাইলটিতে একটি ধ্রুবক হিসাবে সংজ্ঞায়িত করা হয়, এর মান সহ:
0
বা:
0L
বা:
((void*)0)
সংকলক এবং মেমরি মডেল বিকল্পগুলির উপর নির্ভর করে। NULL, কঠোরভাবে বলতে গেলে, সি / সি ++ এর নিজের অংশ নয়।
জাভাতে (টিএম), "নাল" কোনও মূলশব্দ নয়, নাল টাইপের একটি বিশেষ আক্ষরিক। এটি কোনও রেফারেন্স টাইপের ক্ষেত্রে castালাই করা যেতে পারে তবে কোনও আদিম ধরণের যেমন ইনট বা বুলিয়ান নয়। নাল আক্ষরিকের অগত্যা মান শূন্য হয় না। এবং নাল টাইপটিতে কাস্ট করা বা এই ধরণের একটি ভেরিয়েবল ঘোষণা করা অসম্ভব।
বাইটকোড উপস্থাপনা
জাভার null
সরাসরি জেভিএম সমর্থন রয়েছে: এটি বাস্তবায়নের জন্য তিনটি নির্দেশাবলী ব্যবহৃত হয়:
aconst_null
: যেমন null
হিসাবে একটি ভেরিয়েবল সেট করতেObject o = null;
ifnull
এবং ifnonnull
: উদাহরণস্বরূপ null
হিসাবে একটি বস্তুর তুলনাif (o == null)
Chapter ষ্ঠ অধ্যায় "জাভা ভার্চুয়াল মেশিন নির্দেশ সেট" তারপরে null
অন্যান্য নির্দেশাবলীর প্রভাবগুলির উল্লেখ করেছে : এটি NullPointerException
তাদের অনেকের জন্য একটি নিক্ষেপ করে।
2.4। "রেফারেন্সের ধরণ এবং মানগুলি"null
জেনেরিক পদগুলিতেও উল্লেখ করে:
একটি রেফারেন্স মান বিশেষ নাল রেফারেন্সও হতে পারে, কোনও বস্তুর রেফারেন্স নয়, যা এখানে নাল দ্বারা চিহ্নিত করা হবে। নাল রেফারেন্সের শুরুতে কোনও রান-টাইম টাইপ নেই তবে এটি কোনও প্রকারে কাস্ট করা যেতে পারে। একটি রেফারেন্স টাইপের ডিফল্ট মান নাল।
null
বিশেষ মান, এটি কোনও কিছুর উদাহরণ নয় not স্পষ্টত কারণে এটি instanceof
কিছুই হতে পারে না ।
null
একটি বিশেষ মান যা কোনও শ্রেণীর উদাহরণ নয়। এটি নিম্নলিখিত প্রোগ্রাম দ্বারা চিত্রিত:
public class X {
void f(Object o)
{
System.out.println(o instanceof String); // Output is "false"
}
public static void main(String[] args) {
new X().f(null);
}
}
null
নয় String
।
void f(String o)
এটি আরও অর্থবহ হবে।
জাভাতে নাল সি /+ এর নালপ্টারের মতো / অনুরূপ।
সি ++ তে প্রোগ্রাম:
class Point
{
private:
int x;
int y;
public:
Point(int ix, int iy)
{
x = ix;
y = iy;
}
void print() { std::cout << '(' << x << ',' << y << ')'; }
};
int main()
{
Point* p = new Point(3,5);
if (p != nullptr)
{
p->print();
p = nullptr;
}
else
{
std::cout << "p is null" << std::endl;
}
return 0;
}
জাভাতে একই প্রোগ্রাম:
public class Point {
private int x;
private int y;
public Point(int ix, int iy) {
x = ix;
y = iy;
}
public void print() { System.out.print("(" + x + "," + y + ")"); }
}
class Program
{
public static void main(String[] args) {
Point p = new Point(3,5);
if (p != null)
{
p.print();
p = null;
}
else
{
System.out.println("p is null");
}
}
}
এখন আপনি জাভা নাল কি উপরের কোড থেকে বুঝতে পারি? যদি না হয় তবে আমি আপনাকে সি / সি ++ তে পয়েন্টার শিখতে পরামর্শ দিই এবং তারপরে আপনি বুঝতে পারবেন।
নোট করুন যে সিতে সি ++ এর বিপরীতে নালপ্টর অপরিজ্ঞাত করা হয়েছে, তবে এর পরিবর্তে NULL ব্যবহৃত হয়, যা সি ++ তেও ব্যবহার করা যেতে পারে তবে সি ++ এ নালপ্ট্রার কেবল নুলের চেয়ে বেশি পছন্দনীয়, কারণ সি-এ ন্যূনাল সবসময় পয়েন্টারের সাথে সম্পর্কিত এবং এটিই এটি, সুতরাং সি ++ এ প্রত্যয়টি "পিটিআর" শব্দের শেষের সাথে যুক্ত হয়েছিল এবং সমস্ত অক্ষরও এখন ছোট হাতের অক্ষরে রয়েছে তবে এটি কম গুরুত্বপূর্ণ।
জাভাতে প্রতিটি ধরণের শ্রেণিবদ্ধ অ-আদিম সর্বদা সেই ধরণের বস্তুর সাথে সম্পর্কিত হয় বা উত্তরাধিকারসূত্রে হয় এবং নাল হয় নাল শ্রেণীর অবজেক্টের রেফারেন্স, তবে নাল পয়েন্টার নয়, কারণ জাভাতে এই জাতীয় কোনও জিনিস "পয়েন্টার" নেই, তবে শ্রেণীর সাথে উল্লেখ রয়েছে পরিবর্তে অবজেক্ট ব্যবহার করা হয়, এবং জাভাতে নাল ক্লাস অবজেক্টের রেফারেন্সের সাথে সম্পর্কিত, সুতরাং আপনি এটিকে "নুলারফ" বা "নুলরেফবজ" হিসাবেও বলতে পারেন, তবে এটি দীর্ঘ, সুতরাং কেবল এটি "নাল" বলুন।
C ++ আপনি পয়েন্টার এবং জন্য nullptr মান ব্যবহার করতে পারেন ঐচ্ছিক সদস্য / ভেরিয়েবল, অর্থাত্ সদস্য / পরিবর্তনশীল কোন মূল্য আছে এবং এটি কেমন জাভা নাল উদাহরণস্বরূপ ব্যবহার করা যেতে পারে nullptr সাথে অন্যান্যকে সমতুল্য স্থির যদি এটা কোনো মূল্যই তারপর রয়েছে।
জাভাতে দুটি ধরণের প্রধান বিভাগ রয়েছে: আদিম এবং রেফারেন্স । ভেরিয়েবলগুলি একটি আদিম ধরণের স্টোর মান হিসাবে ঘোষণা করা হয়; ভেরিয়েবলগুলি একটি রেফারেন্স ধরণের স্টোর রেফারেন্স হিসাবে ঘোষণা করা হয়।
String x = null;
এই ক্ষেত্রে, সূচনা বিবৃতিটি একটি ভেরিয়েবলকে "x" ঘোষণা করে। "এক্স" স্ট্রিং রেফারেন্স সঞ্চয় করে। এটা এখানে নাল । প্রথমত, নাল কোনও বৈধ অবজেক্ট উদাহরণ নয়, সুতরাং এর জন্য কোনও মেমরি বরাদ্দ নেই। এটি কেবল একটি মান যা ইঙ্গিত দেয় যে অবজেক্টের রেফারেন্সটি বর্তমানে কোনও বস্তুর উল্লেখ করছে না।
আমার মতে জাভাতে নালাগুলি দেখার একটি আকর্ষণীয় উপায় হ'ল এটি এমন কিছু হিসাবে দেখা যা তথ্যের অনুপস্থিতিকে বোঝায় না তবে কেবল আক্ষরিক মান হিসাবে যা কোনও প্রকারের রেফারেন্সে নির্ধারিত হতে পারে। আপনি যদি এটির বিষয়ে চিন্তা করেন তবে যদি এটি তথ্যের অনুপস্থিতি চিহ্নিত করে তবে a1 == a2 এর সত্য হওয়া অর্থবোধ করে না (যদি উভয়কেই নালার মান নির্ধারিত করা হয়) কারণ তারা সত্যই কোনও বস্তুর দিকে নির্দেশ করতে পারে (আমরা কেবল কী কী বস্তুগুলিতে তাদের ইশারা করা উচিত তা জানেন না) ... উপায় দ্বারা নাল == নল জাভাতে ফিরে আসে। যদি জাভা যেমন এসকিউএল: 1999 এর মতো হয় তবে নাল == নাল অজানা হবে (এসকিউএল এর একটি বুলিয়ান মান: 1999 তিনটি মান নিতে পারে: সত্য, মিথ্যা এবং অজানা তবে বাস্তবে অজানা বাস্তব সিস্টেমে নাল হিসাবে প্রয়োগ করা হয়) ... http://en.wikipedia.org/wiki/SQL
সংক্ষিপ্ত এবং সুনির্দিষ্ট উত্তর যা আপনার সমস্ত প্রশ্নের জেএলএস থেকে আনুষ্ঠানিকভাবে উত্তর দেয়:
3.10.7। নাল লিটারাল
নাল টাইপের একটি মান রয়েছে, নাল রেফারেন্স, নাল আক্ষরিক নাল দ্বারা উপস্থাপিত, যা ASCII অক্ষর থেকে গঠিত।
একটি নাল আক্ষরিক সর্বদা নাল টাইপের হয়।
নালকে বরাদ্দ করা হয়েছে এমন ধরণের শুধুমাত্র একটি রেফারেন্স বরাদ্দ করা হয়। আপনি রেফারেন্সের জন্য কোনও মান (বস্তু) বরাদ্দ করবেন না। এ জাতীয় বরাদ্দ জেভিএমের সাথে সুনির্দিষ্ট যে কত রেফারেন্স নেবে এবং কোন মেমরির ক্ষেত্রে এটি বরাদ্দ করা হবে।