null instanceof SomeClassফিরবে falseনাকি নিক্ষেপ করবে NullPointerException?
null instanceof SomeClassফিরবে falseনাকি নিক্ষেপ করবে NullPointerException?
উত্তর:
না, উদাহরণ ব্যবহারের আগে নাল চেকের দরকার নেই।
অভিব্যক্তি x instanceof SomeClassহয় falseযদি xহয় null।
জাভা ভাষার উল্লেখ থেকে, বিভাগ 15.20.2, "তুলনা অপারেটর উদাহরণ টাইপ করুন" :
"চলাকালীন সময়ে,
instanceofঅপারেটরের ফলাফলtrueযদি রিলেশনালএক্সপ্রেসনের মান না হয়nullএবং রেফারেন্সটি টাইপ না করে রেফারেন্সটাইপটিতে কাস্ট করা যেতে পারেClassCastException। অন্যথায় ফলাফল হয়false।"
অপারেন্ডটি যদি নাল হয় তবে ফলাফলটি মিথ্যা।
try itকারণ বর্তমান আচরণ গ্যারান্টিযুক্ত আচরণের মতো নয় ।
Effective Java- amazon.com/Effective-Java-Edition- জোশুয়া- ব্লাচ
instanceofঅপারেটর জাভা 1.0 এর অংশ ছিল, প্রায় 20 বছর আগে মুক্তি পেয়েছিল। বিদ্যমান কোডটি ভেঙে এমনভাবে আচরণটি এখন পরিবর্তন করা অসম্ভব, কিছু সুবিধার অনুপস্থিত যা এই বিশাল ব্যয়কে ছাড়িয়ে যায়। বিশ বছর আগে, যদি সত্য যুক্তি দেওয়া যেতে পারে তবে যুক্তিটি সত্য হতে পারে, বা নাল যুক্তির ব্যতিক্রম ছুঁড়তে পারে। তবে এই সংজ্ঞাগুলির জন্য পৃথক নাল চেকের প্রয়োজন হত।
সত্যিই খুব ভাল প্রশ্ন। আমি শুধু নিজের জন্য চেষ্টা করেছি।
public class IsInstanceOfTest {
public static void main(final String[] args) {
String s;
s = "";
System.out.println((s instanceof String));
System.out.println(String.class.isInstance(s));
s = null;
System.out.println((s instanceof String));
System.out.println(String.class.isInstance(s));
}
}
ছাপে
true
true
false
false
জেএলএস / 15.20.2। তুলনা অপারেটর উদাহরণ টাইপ করুন
চলাকালীন সময়ে
instanceofঅপারেটরের ফলাফলtrueযদি রিলেশনালএক্সপ্রেসের মান না হয়nullএবং রেফারেন্সটি টাইপ না করে রেফারেন্স টাইপ করা যায়ClassCastException। অন্যথায় ফলাফল হয়false।
এপিআই / ক্লাস # ইন্সট্যান্স (অবজেক্ট)
যদি এই
Classঅবজেক্টটি একটি ইন্টারফেসের প্রতিনিধিত্ব করে,trueশ্রেণি বা নির্দিষ্টObjectআর্গুমেন্টের কোনও সুপারক্লাস এই ইন্টারফেসটি প্রয়োগ করে যদি এই পদ্ধতিটি ফিরে আসে ; এটিfalseঅন্যথায় ফিরে আসে । যদি এইClassবস্তুটি কোনও আদিম ধরণের প্রতিনিধিত্ব করে তবে এই পদ্ধতিটি ফিরে আসেfalse।
sকেবল একটি অবজেক্ট রেফারেন্স ভেরিয়েবল। এটি একটি বিদ্যমান বিদ্যমান অবজেক্ট ( "") উল্লেখ করতে পারে বা এটি একটি (দ্য) nullআক্ষরিক উল্লেখ উল্লেখ করতে পারে।
nullস্ট্রিং ডেটা নয়, ভেরিয়েবল এটি কীভাবে দেখায় তা বিবেচনা করে না। উদাহরণস্বরূপ s instanceof Stringহিসাবে একই নয় field.getType().equals(String.class)।
s instanceof Strings"" instanceof Stringnull instanceof String
না এইটা না. এটির প্রথম অপারেন্ড instanceofহলে ফিরে falseআসবে null।
ঠিক একটি জালিয়াতি হিসাবে :
এমনকি ফিরে আসবে ।(((A)null)instanceof A)false
(যদি টাইপকাস্টিং nullআশ্চর্যজনক মনে হয়, কখনও কখনও আপনাকে এটি করতে হয়, উদাহরণস্বরূপ পরিস্থিতিতে যেমন:
public class Test
{
public static void test(A a)
{
System.out.println("a instanceof A: " + (a instanceof A));
}
public static void test(B b) {
// Overloaded version. Would cause reference ambiguity (compile error)
// if Test.test(null) was called without casting.
// So you need to call Test.test((A)null) or Test.test((B)null).
}
}
সুতরাং Test.test((A)null)মুদ্রণ করবে a instanceof A: false।)
পিএস: আপনি যদি ভাড়া নিচ্ছেন তবে দয়া করে এটিকে কাজের সাক্ষাত্কারের প্রশ্ন হিসাবে ব্যবহার করবেন না। : ডি
কোন । জাভা আক্ষরিক nullকোনও শ্রেণীর উদাহরণ নয়। সুতরাং এটি কোনও শ্রেণীর উদাহরণ হতে পারে না । instanceof পারেন ফিরে আসবে falseবাtrue তাই <referenceVariable> instanceof <SomeClass>আয় falseযখন referenceVariableমান নাল।
instanceofঅপারেটর স্পষ্ট দরকার নেই null, চেক যেমন নিক্ষেপ করে না NullPointerExceptionপ্রতীক হলে null।
চলাকালীন সময়ে, instanceofঅপারেটরের ফলাফলটি সত্য যদি আপেক্ষিক অভিব্যক্তির মান না হয় nullএবং শ্রেণি castালাই ব্যতিক্রম না বাড়িয়ে রেফারেন্সটি রেফারেন্সের ধরণে দেওয়া যেতে পারে।
যদি অপারেন্ড হয় nullতবে instanceofঅপারেটর ফিরে আসে falseএবং তাই সুস্পষ্ট নাল চেকের প্রয়োজন হয় না।
নীচের উদাহরণটি বিবেচনা করুন,
public static void main(String[] args) {
if(lista != null && lista instanceof ArrayList) { //Violation
System.out.println("In if block");
}
else {
System.out.println("In else block");
}
}
এর সঠিক ব্যবহার instanceofনীচে দেখানো হয়েছে,
public static void main(String[] args) {
if(lista instanceof ArrayList){ //Correct way
System.out.println("In if block");
}
else {
System.out.println("In else block");
}
}