java - একটি NullPointerException কি, এবং আমি কিভাবে এটি ঠিক করব?




(8)

নল পয়েন্টার ব্যতিক্রমগুলি ( java.lang.NullPointerException ) কী এবং এর কারণ কী?

কোন পদ্ধতি / সরঞ্জামগুলি ব্যবহার করা যেতে পারে তা নির্ধারণ করার জন্য যাতে আপনি ব্যতিক্রমটি বন্ধ করে দেওয়ার কারণে প্রোগ্রামটিকে অকালিকভাবে বাতিল করা হয়?


একটি NullPointerException কি?

JavaDocs শুরু করার জন্য একটি ভাল জায়গা। তারা এই আচ্ছাদিত আছে:

একটি অ্যাপ্লিকেশন প্রয়োজন যেখানে একটি ক্ষেত্রে নকল ব্যবহার করার চেষ্টা করার সময় নিক্ষিপ্ত। এই অন্তর্ভুক্ত:

  • একটি নিল বস্তুর উদাহরণ পদ্ধতি কল।
  • অ্যাক্সেস বা একটি নিল বস্তুর ক্ষেত্র পরিবর্তন।
  • যদি এটি একটি অ্যারের হিসাবে নল দৈর্ঘ্য গ্রহণ।
  • অ্যাক্সেস বা অ্যারের স্লট পরিবর্তন হিসাবে এটি একটি অ্যারে ছিল।
  • এটি একটি ঠেকানোর মান হিসাবে যদি নাল নিক্ষেপ।

অ্যাপ্লিকেশনগুলি নিল বস্তুর অন্যান্য অবৈধ ব্যবহারগুলি ইঙ্গিত করার জন্য এই শ্রেণির দৃষ্টান্তগুলি নিক্ষেপ করা উচিত।

এটি এমন ক্ষেত্রেও যে আপনি যদি synchronized সাথে একটি অস্পষ্ট রেফারেন্স ব্যবহার করার চেষ্টা করেন, তবে এই ব্যতিক্রমটিকে JLS এর প্রতিও নিক্ষেপ করবে:

SynchronizedStatement:
    synchronized ( Expression ) Block
  • অন্যথা, যদি এক্সপ্রেশনটির মান নাল হয়, একটি NullPointerException নিক্ষেপ করা হয়।

আমি কিভাবে এটা ঠিক করব?

সুতরাং আপনি একটি NullPointerException । আপনি কিভাবে এটি ঠিক করবেন? আসুন একটি সহজ উদাহরণ NullPointerException যা একটি NullPointerException ছোঁড়ে:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

নল মান সনাক্ত করুন

প্রথম ধাপে ঠিক কোন মানগুলি ব্যতিক্রমগুলি ঘটছে তা চিহ্নিত করা হয় । এই জন্য, আমরা কিছু ডিবাগিং করতে হবে। স্ট্যাকট্রাস পড়তে শিখতে গুরুত্বপূর্ণ। এটি আপনাকে দেখানো হবে যেখানে ব্যতিক্রমটি নিক্ষেপ করা হয়েছে:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

এখানে, আমরা দেখি যে ব্যতিক্রমটি লাইন 13 ( printString পদ্ধতিতে) এ নিক্ষিপ্ত হয়। লাইনটি দেখুন এবং লগিং বিবৃতিগুলি যোগ করে বা ডিবাগার ব্যবহার করে কোন মানগুলি নিল হয় তা পরীক্ষা করুন। আমরা এটি sull খুঁজে বের করে, এবং এটি উপর length কলিং ব্যতিক্রম ব্যতিক্রম ছোঁড়ে। আমরা দেখতে পাচ্ছি যে প্রোগ্রামটি s.length() পদ্ধতি থেকে সরানো হলে ব্যতিক্রমটি নিক্ষেপ করা বন্ধ করে দেয়।

এই মান থেকে আসা যেখানে ট্রেস

এই মান থেকে আসে যেখানে পরবর্তী চেক। পদ্ধতির কলকারীদের অনুসরণ করে আমরা দেখতে পাচ্ছি যে printString(name) print() printString(name) দিয়ে this.name হয় এবং এই this.name নল।

এই মান নির্ধারণ করা উচিত যেখানে ট্রেস

কোথায় এই। this.name সেট? setName(String) পদ্ধতিতে। আরো কিছু ডিবাগিংয়ের মাধ্যমে, আমরা দেখতে পারি যে এই পদ্ধতিটি একেবারেই বলা হয় না। যদি পদ্ধতিটি বলা হয়, তবে এই পদ্ধতিগুলির যে ক্রমটি বলা হয় তা পরীক্ষা করে দেখুন এবং মুদ্রণ পদ্ধতির পরে সেট পদ্ধতি বলা হয় না।

এটি আমাদের একটি সমাধান দেওয়ার জন্য যথেষ্ট: printer.setName() কল করুন printer.setName() কে কল করার আগে।

অন্যান্য সংশোধন

পরিবর্তনশীল একটি ডিফল্ট মান setName পারে (এবং setName এটি নল সেট করা প্রতিরোধ করতে পারে):

private String name = "";

হয় print বা printString পদ্ধতি printString জন্য চেক করতে পারেন, উদাহরণস্বরূপ:

printString((name == null) ? "" : name);

অথবা আপনি শ্রেণীটি ডিজাইন করতে পারেন যাতে name সর্বদা একটি নন-নুল মানের থাকে :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

আরো দেখুন:

আমি এখনও সমস্যা খুঁজে পাচ্ছি না

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


প্রশ্নঃ কোন NullPointerException ( NullPointerException ) এর কারণ কী?

আপনার জানা উচিত যে, জাভা প্রকারগুলি আদিম প্রকারে ( boolean , int , ইত্যাদি) এবং রেফারেন্স প্রকারে বিভক্ত। জাভাতে রেফারেন্স প্রকার আপনাকে বিশেষ মান null ব্যবহার করতে দেয় যা "কোন বস্তু" বলার জাভা উপায়।

যখনই আপনার প্রোগ্রামটি একটি সত্যিকারের রেফারেন্স হিসাবে একটি প্রোগ্রাম ব্যবহার করার প্রচেষ্টা করে তখনই NullPointerException রানটাইম এ নিক্ষিপ্ত হয়। উদাহরণস্বরূপ, যদি আপনি এটি লিখেন:

public class Test {
    public static void main(String[] args) {
        String foo = null;
        int length = foo.length();   // HERE
    }
}

"এখানে" লেবেলযুক্ত বিবৃতি একটি NullPointerException রেফারেন্সে length() পদ্ধতিটি চালানোর চেষ্টা করবে, এবং এটি একটি NullPointerException নিক্ষেপ করবে।

অনেকগুলি উপায় রয়েছে যা আপনি একটি NullPointerException মান ব্যবহার করতে পারেন যা একটি NullPointerException । প্রকৃতপক্ষে, এনপিই না করেই আপনি একটি null দিয়ে যা করতে পারেন তা হল:

  • একটি রেফারেন্স পরিবর্তনশীল এটি বরাদ্দ বা একটি রেফারেন্স পরিবর্তনশীল থেকে এটি পড়তে,
  • একটি অ্যারে উপাদান এটি বরাদ্দ করুন অথবা একটি অ্যারে উপাদান থেকে এটি পড়ুন (প্রদান করা যে অ্যারের রেফারেন্স নিজেই অ-নাল!),
  • এটি একটি প্যারামিটার হিসাবে পাস করুন অথবা ফলাফল হিসাবে এটি ফেরত দিন, অথবা
  • == বা != অপারেটর, বা instanceof এটি ব্যবহার করে পরীক্ষা করুন।

প্রশ্নঃ আমি কিভাবে এনপিই স্ট্যাকট্রাস পড়তে পারি?

ধরুন আমি উপরের প্রোগ্রামটি কম্পাইল এবং চালাচ্ছি:

$ javac Test.java 
$ java Test
Exception in thread "main" java.lang.NullPointerException
    at Test.main(Test.java:4)
$

প্রথম পর্যবেক্ষণ: সংকলন সফল হয়েছে! প্রোগ্রাম সমস্যা একটি সংকলন ত্রুটি নয়। এটি একটি রানটাইম ত্রুটি। (কিছু আইডিই আপনার প্রোগ্রামকে সর্বদা একটি ব্যতিক্রম নিক্ষেপ করতে পারে সতর্ক করে দিতে পারে ... তবে মানক javac কম্পাইলার নয়।)

দ্বিতীয় পর্যবেক্ষণ: যখন আমি প্রোগ্রাম চালাতে, এটি "gobbledy-gook" দুটি লাইন আউটপুট। ভুল !! যে gobbledy-gook না। এটি একটি স্ট্যাকট্রাস ... এবং এটি গুরুত্বপূর্ণ তথ্য সরবরাহ করে যা আপনার কোডের ত্রুটির ট্র্যাক করতে সহায়তা করবে, যদি আপনি এটি সাবধানে পড়তে সময় নেন।

সুতরাং আসুন এটি কি বলে তা দেখুন:

Exception in thread "main" java.lang.NullPointerException

স্ট্যাক ট্রেসের প্রথম লাইন আপনাকে অনেকগুলি জিনিস বলে:

  • এটি আপনাকে জাভা থ্রেডের নাম বলে, যেখানে ব্যতিক্রমটি নিক্ষেপ করা হয়েছিল। এক থ্রেডের সাথে একটি সহজ প্রোগ্রামের জন্য (এই একের মত), এটি "প্রধান" হবে। চল এগোই ...
  • এটি আপনাকে বলে দেওয়া ব্যতিক্রমটির সম্পূর্ণ নাম বলে; অর্থাৎ java.lang.NullPointerException
  • ব্যতিক্রম একটি সংযুক্ত ত্রুটি বার্তা আছে, যে ব্যতিক্রম নাম পরে আউটপুট হবে। NullPointerException এই সম্মান অস্বাভাবিক, কারণ এটি খুব কমই একটি ত্রুটি বার্তা আছে।

দ্বিতীয় লাইনটি একটি এনপিই নির্ণয়ের ক্ষেত্রে সবচেয়ে গুরুত্বপূর্ণ।

at Test.main(Test.java:4)

এটি আমাদের অনেকগুলি জিনিস বলে:

  • "Test.main এ" বলেছেন যে আমরা Test ক্লাসের main পদ্ধতিতে ছিলাম।
  • "Test.java:4" ক্লাসের উৎস ফাইলের নাম দেয় এবং এটি আমাদেরকে বলে যে এই ঘটনা যেখানে ঘটেছে ফাইলটির 4 নম্বর লাইনটিতে।

যদি আপনি উপরের ফাইলটিতে লাইন গণনা করেন তবে লাইন 4টি "এখানে" মন্তব্যের সাথে লেবেলযুক্ত।

উল্লেখ্য, আরো জটিল উদাহরণে, এনপিই স্ট্যাক ট্রেসে প্রচুর লাইন থাকবে। কিন্তু আপনি নিশ্চিত হতে পারেন যে দ্বিতীয় লাইনটি (প্রথম "এ" লাইন) আপনাকে এনপিই নিক্ষেপ করা হবে যেখানে বলবে 1

সংক্ষেপে স্ট্যাকের ট্রেস আমাদেরকে নির্বাকভাবে বলবে যে প্রোগ্রামের বিবৃতিটি এনপিই নিক্ষেপ করেছে।

1 - বেশ সত্য নয়। নেস্টেড ব্যতিক্রম বলা জিনিস আছে ...

প্রশ্নঃ আমার কোডে এনপিইউ ব্যতিক্রমের কারণ কীভাবে অনুসরণ করব?

এটি কঠিন অংশ। সংক্ষিপ্ত উত্তর স্ট্যাক ট্রেস, সোর্স কোড এবং প্রাসঙ্গিক API ডকুমেন্টেশন দ্বারা সরবরাহিত প্রমাণ লজিক্যাল পরিপন্থী প্রয়োগ করা হয়।

আসুন সহজ উদাহরণ (উপরে) দিয়ে প্রথম চিত্রিত করা যাক। আমরা স্ট্যাক ট্রেস আমাদের বলেছে যে লাইন তাকান শুরু, এনপিই ঘটেছে যেখানে:

int length = foo.length(); // HERE

কিভাবে একটি এনপিই নিক্ষেপ করতে পারেন?

আসলে কেবল একটি উপায় রয়েছে: এটি শুধুমাত্র তখনই ঘটতে পারে যদি foo মানটি null । আমরা তারপর null উপর length() পদ্ধতি চালানোর চেষ্টা করুন এবং .... ব্যাং!

কিন্তু (আমি আপনাকে বলতে শুনেছি) যদি এনপিই length() পদ্ধতি কলের ভিতরে ফেলে দেওয়া হয় তবে কী হবে?

আচ্ছা, যদি এটা ঘটে, স্ট্যাক ট্রেস ভিন্ন চেহারা হবে। প্রথম "এট" লাইনটি java.lang.String ক্লাসে কিছু লাইনে নিক্ষেপ করা হয়েছিল এবং Test.java লাইন 4 দ্বিতীয় "এ" লাইন হবে বলে বলে।

তাই যে null থেকে এসেছেন? এই ক্ষেত্রে এটি সুস্পষ্ট, এবং এটা ঠিক করার জন্য আমাদের অবশ্যই এটির প্রয়োজন। ( foo একটি নন-নুল মান বরাদ্দ করুন।)

ঠিক আছে, তাই এর একটি সামান্য আরো চতুর উদাহরণ চেষ্টা করুন। এই কিছু যৌক্তিক deduction প্রয়োজন হবে।

public class Test {

    private static String[] foo = new String[2];

    private static int test(String[] bar, int pos) {
        return bar[pos].length();
    }

    public static void main(String[] args) {
        int length = test(foo, 1);
    }
}

$ javac Test.java 
$ java Test
Exception in thread "main" java.lang.NullPointerException
    at Test.test(Test.java:6)
    at Test.main(Test.java:10)
$ 

সুতরাং এখন আমরা দুটি "এ" লাইন আছে। প্রথম এক এই লাইন জন্য:

return args[pos].length();

এবং দ্বিতীয়টি এই লাইনের জন্য:

int length = test(foo, 1);

প্রথম লাইনের দিকে তাকালে কীভাবে এনপিই নিক্ষেপ করা যায়? দুটি উপায় আছে:

  • যদি bar মানটি null তবে bar[pos] একটি এনপিই নিক্ষেপ করবে।
  • যদি bar[pos] মান null হয় তবে তার উপর length() কল করা length() একটি এনপিই নিক্ষেপ করবে।

পরবর্তীতে, এগুলি কোন পরিস্থিতিতে আসলে ঘটছে তা ব্যাখ্যা করে আমাদের জানা দরকার। আমরা প্রথমটি অনুসন্ধান করে শুরু করব:

bar থেকে আসে কোথায়? এটি test পদ্ধতি কলটির একটি প্যারামিটার এবং যদি আমরা কীভাবে test হয়েছিল তা দেখি, আমরা দেখতে পারি যে এটি foo স্ট্যাটিক পরিবর্তনশীল থেকে এসেছে। উপরন্তু, আমরা স্পষ্টভাবে দেখতে পাচ্ছি যে আমরা একটি নন-নুল মানতে foo শুরু করেছি। যে স্বতঃস্ফূর্তভাবে এই ব্যাখ্যা বাতিল করতে যথেষ্ট। (তত্ত্ব অনুসারে, অন্য কিছু foo পরিবর্তন করতে পারে null ... কিন্তু যে এখানে ঘটছে না।)

তাই আমাদের দ্বিতীয় দৃশ্যকল্প সম্পর্কে কি? আচ্ছা, আমরা দেখতে পারি যে pos হল 1 , তাই এর অর্থ হল foo[1] অবশ্যই null হতে হবে। এটা কি সম্ভব?

আসলেই তাই! এবং এটাই সমস্যা. যখন আমরা এইভাবে শুরু করি:

private static String[] foo = new String[2];

আমরা একটি String[] বরাদ্দ String[] দুটি উপাদান যা নিল শুরু হয় । তারপরে, আমরা foo এর বিষয়বস্তু পরিবর্তন করে নিচ্ছি ... তাই foo[1] এখনও null


একটি NULL পয়েন্টার কোথাও নির্দেশ করে যে এক। যখন আপনি কোন পয়েন্টারকে p , তখন আপনি বলবেন "আমাকে" p "এ সংরক্ষিত অবস্থানটিতে তথ্য দিন। যখন p একটি নিল পয়েন্টার হয়, তখন p তে সংরক্ষিত অবস্থানটি nowhere , আপনি বলছেন" আমাকে অবস্থানের তথ্যটি দিন 'কোথাও নেই'। স্পষ্টতই, এটি এটি করতে পারে না, সুতরাং এটি একটি NULL pointer exception ছুড়ে ফেলে।

সাধারণভাবে, কারণ কিছু সঠিকভাবে শুরু করা হয়নি।


একটি অ্যাপ্লিকেশন যেখানে একটি বস্তুর প্রয়োজন যেখানে একটি অ্যাপ্লিকেশন নিল ব্যবহার করার প্রচেষ্টা একটি নিল পয়েন্টার ব্যতিক্রম নিক্ষেপ করা হয়। এই অন্তর্ভুক্ত:

  1. একটি null বস্তুর উদাহরণ পদ্ধতি কল।
  2. অ্যাক্সেস বা একটি null বস্তুর ক্ষেত্র পরিবর্তন।
  3. যদি এটি একটি অ্যারের হিসাবে null দৈর্ঘ্য গ্রহণ।
  4. অ্যাক্সেস বা অ্যারের স্লট পরিবর্তন হিসাবে এটি একটি অ্যারে ছিল।
  5. এটি একটি ঠেকানোর মান হিসাবে যদি null নিক্ষেপ।

অ্যাপ্লিকেশনগুলি null বস্তুর অন্যান্য অবৈধ ব্যবহারগুলি ইঙ্গিত করার জন্য এই শ্রেণির দৃষ্টান্তগুলি নিক্ষেপ করা উচিত।

রেফারেন্স: JavaDocs


এটি কীভাবে ঘটে এবং কিভাবে এটি ঠিক করবেন তা ব্যাখ্যা করার জন্য অনেকগুলি ব্যাখ্যা ইতিমধ্যে উপস্থিত রয়েছে, তবে আপনাকে NullPointerException এড়াতে সর্বোত্তম অনুশীলনগুলি অনুসরণ করতে হবে।

আরও দেখুন: সেরা অনুশীলন একটি ভাল তালিকা

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

সারাংশ:

  1. ভাল সূচনা প্রয়োগ করার জন্য final সংশোধনকারী ব্যবহার করুন।
  2. পদ্ধতিতে নাল ফেরত এড়ানোর জন্য, উদাহরণস্বরূপ প্রযোজ্য যখন খালি সংগ্রহ ফিরে।
  3. @NotNull এবং @Nullable @NotNull টীকাগুলি ব্যবহার করুন
  4. যখন দ্রুত না থাকা উচিত তখন পুরো অ্যাপ্লিকেশনের মাধ্যমে নল বস্তুর বিস্তার এড়ানোর জন্য দ্রুত ব্যর্থ হন এবং দাবিগুলি ব্যবহার করুন।
  5. একটি পরিচিত বস্তুর সাথে সমান ব্যবহার করুন: if("knownObject".equals(unknownObject)
  6. valueOf() ()।
  7. StringUtils.isEmpty(null) পদ্ধতিতে নল নিরাপদ StringUtils পদ্ধতি ব্যবহার করুন।

জাভা, সবকিছু একটি বর্গ আকারে হয়।

আপনি যদি কোনও বস্তু ব্যবহার করতে চান তবে আপনার দুটি পর্যায় রয়েছে:

  1. ঘোষণা করা
  2. আরম্ভ

উদাহরণ:

  • ঘোষণা: Object a;
  • সূচনা: a=new Object();

অ্যারের ধারণা জন্য একই

  • ঘোষণা: Item i[]=new Item[5];
  • সূচনা: i[0]=new Item();

আপনি যদি প্রাথমিককরণ বিভাগটি না দিচ্ছেন তবে NullpointerException সৃষ্টি হয়।


Java আপনি যে সকল ভেরিয়েবলগুলি ঘোষণা করেন তা আসলে বস্তুগুলির (বা প্রাইমটিভ) বস্তুগুলির "রেফারেন্স" এবং বস্তুর নয়।

যখন আপনি একটি বস্তু পদ্ধতি চালানোর চেষ্টা করেন, রেফারেন্সটি জীবন্ত বস্তুটিকে সেই পদ্ধতিটি কার্যকর করার জন্য জিজ্ঞাসা করে। কিন্তু যদি রেফারেন্স নুল (কিছুই, শূন্য, অকার্যকর, nada) উল্লেখ করা হয় তাহলে পদ্ধতি কার্যকর করা হয় কোন উপায় নেই। তারপর রানটাইম আপনাকে একটি NullPointerException নিক্ষেপ করে জানাতে দেয়।

আপনার রেফারেন্স "নুন্য -> পয়েন্টার", নুল করতে "পয়েন্টিং" হয়।

বস্তু ভিএম মেমরি স্পেসে থাকে এবং এটি অ্যাক্সেস করার একমাত্র উপায় this রেফারেন্সগুলি ব্যবহার করে। এই উদাহরণ নিন:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

এবং আপনার কোড অন্য জায়গায়:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

এটি একটি গুরুত্বপূর্ণ বিষয় - যখন কোনো বস্তুর কোন উল্লেখ থাকে না (উপরে reference উদাহরণে যখন reference এবং otherReference reference otherReference পয়েন্ট করে) তখন বস্তুটি " otherReference " হয়। আমরা এর সাথে কাজ করতে পারব না এমন কোনো উপায় নেই, তাই এই বস্তু সংগ্রহ করা আবর্জনা সংগ্রহের জন্য প্রস্তুত, এবং কিছু সময়ে, VM এই বস্তুর দ্বারা ব্যবহৃত মেমরি মুক্ত করবে এবং অন্যটি বরাদ্দ করবে।


NullPointerException এর আরেকটি ঘটনা ঘটে যখন একটি বস্তুর অ্যারে ঘোষণা করে, তারপরে অবিলম্বে NullPointerException মধ্যে NullPointerException উপাদানগুলি চেষ্টা করে।

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

তুলনা আদেশ বিপরীত হলে এই বিশেষ এনপিই এড়াতে পারে; যেমন, গ্যারান্টিযুক্ত নন-নুল বস্তুতে .equals ব্যবহার করুন।

একটি অ্যারে ভিতরে সব উপাদান তাদের সাধারণ প্রাথমিক মান শুরু হয় ; বস্তুর অ্যারের যে কোনও প্রকারের জন্য, এর মানে হল যে সমস্ত উপাদান null

আপনি অ্যাক্সেস বা তাদের dereferencing আগে অ্যারে উপাদান আরম্ভ করা আবশ্যক

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}






nullpointerexception