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

কোড কনসোল আউটপুট

public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
                    
0
শূন্য

কিন্তু যদি আপনি এই মত একটি অ্যারে ঘোষণা করেন:


String[] strings = new String[12];

12টি উপাদান সমন্বিত একটি অ্যারে তৈরি করা হবে, এবং তাদের সবগুলি শূন্য হবে :

কোড কনসোল আউটপুট

public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println("Element " + i + ":" + strings[i]);
        }
    }
}
                    
এলিমেন্ট 0: নাল
এলিমেন্ট 1: নাল
এলিমেন্ট 2: নাল
এলিমেন্ট 3:
নাল এলিমেন্ট 4: নাল
এলিমেন্ট 5: নাল
এলিমেন্ট 6: নাল
এলিমেন্ট 7: নাল
এলিমেন্ট 8: নাল
এলিমেন্ট 9: নাল
এলিমেন্ট 10: নাল
এলিমেন্ট 11: null

আপনি দেখতে পাচ্ছেন, একটি স্ট্রিং এর সাথে সংযুক্ত হলে, মান নাল স্ট্রিং " নাল " হয়ে যায়। এটি বলেছিল, যদি আপনি এটিতে toString() পদ্ধতিতে কল করেন, এটির মতো:


String[] strings = null;
System.out.println(strings.toString());

তারপর আপনি একটি NullPointerException পাবেন (আমরা পরে বিস্তারিতভাবে ব্যতিক্রমগুলি নিয়ে আলোচনা করব)। একই জিনিস ঘটবে যদি আপনি নাল এ অন্য কোন পদ্ধতি কল করার চেষ্টা করেন (ব্যতিক্রমটি স্ট্যাটিক পদ্ধতি, যা আপনি শীঘ্রই জানতে পারবেন):


public static void main(String[] args) {
    StringBuilder sb = null;
    sb.append("test"); // This will compile, but there will be a runtime error
}

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


String firstName = Null; // Compilation error

String secondName = NULL; // Compilation error

String fullName = null; // This will compile

null এর সাথে আপনি আর কী করতে পারেন এবং কী করতে পারবেন না তা দেখুন :

  • আপনি যেকোনো রেফারেন্সে নাল বরাদ্দ করতে পারেন:

    
    StringBuilder sb = null;
                
  • null কোনো রেফারেন্স টাইপ নিক্ষেপ করা যেতে পারে:

    
    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
                
  • null একটি আদিম ভেরিয়েবলে বরাদ্দ করা যাবে না:

    
    int i = null; // This won't compile
                
  • null == এবং != ব্যবহার করে তুলনা করা যেতে পারে

  • null == null সত্য প্রদান করে

আগের পাঠে, আমরা কীভাবে জাভাতে সবকিছু একটি অবজেক্ট, এবং প্রতিটি বস্তুর একটি ধরন আছে সে সম্পর্কে কথা বলেছি।

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

মনে রাখার মতো ঘটনা:

  • null হল রেফারেন্স ডেটা প্রকারের জন্য ডিফল্ট মান
  • নাল মানে "কোন মূল্য নেই"
  • যদি আমরা একটি বস্তুর উপর কোনো পদ্ধতি কল করি যার মান null , কোডটি কম্পাইল হবে কিন্তু রানটাইমে আমরা একটি NullPointerException পাব ।