ঠিকানাগুলি সংরক্ষণ করে রেফারেন্সগুলি প্রয়োগ করা যেতে পারে। সাধারণত জাভা রেফারেন্সগুলি পয়েন্টার হিসাবে প্রয়োগ করা হবে, তবে এটি নির্দিষ্টকরণের দ্বারা প্রয়োজন হয় না। তারা আরও সহজে আবর্জনা সংগ্রহ সক্ষম করার জন্য বাড়তি দিকনির্দেশের একটি স্তর ব্যবহার করছেন। তবে শেষ পর্যন্ত এটি (প্রায় সর্বদা) (সি-স্টাইল) পয়েন্টারগুলিকে (জাভা-স্টাইল) রেফারেন্সগুলি প্রয়োগের সাথে জড়িত থাকার জন্য সিদ্ধ করে দেবে।
আপনি রেফারেন্স সহ পয়েন্টার পাটিগণিত করতে পারবেন না। সি এর পয়েন্টার এবং জাভাতে একটি রেফারেন্সের মধ্যে সর্বাধিক গুরুত্বপূর্ণ পার্থক্য হ'ল আপনি আসলে জাভাতে কোনও রেফারেন্সের অন্তর্নিহিত মানটি পেতে (এবং হেরফের করতে পারবেন না)। অন্য কথায়: আপনি পয়েন্টার পাটিগণিত করতে পারবেন না।
সিতে আপনি একটি পয়েন্টারে (অর্থাত্ ঠিকানা) কিছু যুক্ত করতে পারেন বা "কাছাকাছি" থাকা জিনিসগুলিতে বা কোনও জায়গায় যে জায়গাগুলি নির্দেশ করতে পারেন তার দিকে নির্দেশ করতে কোনও কিছু বিয়োগ করতে পারেন ।
জাভাতে, একটি উল্লেখ কেবল একটি জিনিস এবং সেই জিনিসটির দিকে নির্দেশ করে। আপনি কোনও ভেরিয়েবলকে আলাদা রেফারেন্স ধরে রাখতে পারেন তবে আপনি এটি "মূল জিনিসটির পরে জিনিস" নির্দেশ করতে বলতে পারেন না।
তথ্যসূত্র দৃ strongly়ভাবে টাইপ করা হয়। আরেকটি পার্থক্য হল যে একটি রেফারেন্স ধরণ হয় অনেক বেশি কঠোরভাবে জাভা নিয়ন্ত্রিত চেয়ে পয়েন্টার ধরণ সি রয়েছে সি ইন আপনি একটি থাকতে পারে int*
এবং সামনে ছুঁড়ে char*
ও ঠিক সেই অবস্থানে মেমরি পুনরায় ব্যাখ্যা। জাভাতে এই পুনরায় ব্যাখ্যার কাজ হয় না: আপনি কেবলমাত্র রেফারেন্সের অন্য প্রান্তে বস্তুটি ইতিমধ্যে এমন কিছু হিসাবে ব্যাখ্যা করতে পারেন (অর্থাত্ বস্তুটি আসলে একটি হলেObject
আপনি কেবলমাত্রString
রেফারেন্সের রেফারেন্স দিতে পারেনString
)।
এই পার্থক্যগুলি সি পয়েন্টারগুলিকে আরও শক্তিশালী, তবে আরও বিপজ্জনক করে তোলে। এই দুটি সম্ভাবনাই (পয়েন্টার পাটিগণিত এবং পুনরায় ব্যাখ্যা করে মূল্যবোধের দিকে নির্দেশ করা হচ্ছে) সিটিতে নমনীয়তা যুক্ত করে এবং ভাষার কিছু শক্তির উত্স হয়। কিন্তু তারা আরো সমস্যার বড় উত্স, যদি ভুল করে ব্যবহার করা তারা সহজে অনুমানের যে আপনার কোড চারপাশে নির্মিত হয় ভাঙ্গতে পারে কারণ। এবং এগুলি ভুলভাবে ব্যবহার করা বেশ সহজ।