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 String
s
"" instanceof String
null 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");
}
}