জাভাতে কোন অ্যারের ডিফল্ট সূচনা কী?


144

সুতরাং আমি একটি int অ্যারে ঘোষণা এবং শুরু করছি:

static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
    arr[i] = UN;
}

বলুন পরিবর্তে আমি এটি করি ...

int[] arr = new int[5];
System.out.println(arr[0]);

... 0স্ট্যান্ডার্ড আউট প্রিন্ট করা হবে। এছাড়াও, আমি যদি এটি করি:

static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);

... trueস্ট্যান্ডার্ড আউট প্রিন্ট করা হবে। তাহলে জাভা কীভাবে ডিফল্টরূপে আমার অ্যারে শুরু করছে? এটি অনুমান করা কি নিরাপদ যে ডিফল্ট সূচনাটি অ্যারে সূচকগুলি সেট করে 0যা এর অর্থ হ'ল আমাকে অ্যারের মধ্য দিয়ে লুপ করতে হবে না এবং এটি আরম্ভ করতে হবে না?

ধন্যবাদ।


6
স্রেফ ডকস পড়ুন;) ডকস.অরাকল
বেঞ্জ

উত্তর:


281

একটি জাভা প্রোগ্রামের প্রত্যেকটি প্রোগ্রামার দ্বারা স্পষ্টভাবে কোনও কিছুর সাথে সেট না করে, শূন্য মানের সাথে শুরু করা হয়।

  • রেফারেন্সের জন্য (যে কোনও জিনিস যা কোনও বস্তুকে ধারণ করে) যা তা null
  • সংক্ষিপ্ত / সংক্ষিপ্ত / বাইট / দীর্ঘ জন্য এটি একটি 0
  • ভাসা / ডাবল জন্য এটি একটি 0.0
  • বুলিয়ানদের জন্য এটি একটি false
  • চরের জন্য এটি নাল অক্ষর '\u0000'(যার দশমিক সমতুল্য 0)।

আপনি যখন কোনও কিছুর জন্য অ্যারে তৈরি করেন, সমস্ত প্রবেশিকাও শূন্য হয়। সুতরাং আপনার অ্যারে এটিকে তৈরি করার ঠিক পরে পাঁচটি শূন্য ধারণ করেnew

দ্রষ্টব্য (মন্তব্যের ভিত্তিতে): জাভা ভার্চুয়াল মেশিনকে স্থানীয় ভেরিয়েবলগুলি বরাদ্দ করার সময় অন্তর্নিহিত মেমোরিটি শূন্য করার প্রয়োজন হয় না (এগুলি প্রয়োজন হলে দক্ষ স্ট্যাক অপারেশনকে অনুমতি দেয়) যাতে জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনটির স্থানীয় ভেরিয়েবলগুলি আরম্ভ করার প্রয়োজন হয়।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
ব্র্যাড লারসন

সংকলকটি আপনাকে বলবে যে স্থানীয় ভেরিয়েবলগুলি ব্যতীত সমস্ত কিছুই যা কোনও কিছুর সাথে আরম্ভ হয় না।
লার্নের মারকুইস

উত্তর শেষে উল্লিখিত হিসাবে @ ব্যবহারকারী 207421।
থরবজর্ন রাভন অ্যান্ডারসন

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

@ ব্যবহারকারী 207421 "প্রোগ্রামার দ্বারা স্পষ্টভাবে কিছুতে সেট করা নেই" (যা সংকলকটির প্রয়োজন হতে পারে)।
থরবজর্ন রাভন অ্যান্ডারসন

60

থেকে জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন :

  • প্রতিটি শ্রেণি ভেরিয়েবল, উদাহরণ পরিবর্তনশীল, বা অ্যারের উপাদান তৈরি করা হলে এটি একটি ডিফল্ট মান দিয়ে শুরু করা হয় (§15.9, §15.10):

    • বাইট টাইপ করার জন্য, ডিফল্ট মানটি শূন্য, অর্থাৎ, এর মান (byte)0
    • সংক্ষিপ্ত টাইপের জন্য, ডিফল্ট মানটি শূন্য, অর্থাৎ, এর মান (short)0
    • টাইপ ইন্টের জন্য, ডিফল্ট মানটি শূন্য, অর্থাৎ 0
    • টাইপ দীর্ঘ জন্য, ডিফল্ট মান শূন্য, যে 0L,।
    • টাইপ ফ্লোটের জন্য, ডিফল্ট মানটি ধনাত্মক শূন্য, অর্থাৎ 0.0f
    • টাইপ ডাবলের জন্য, ডিফল্ট মানটি ধনাত্মক শূন্য, অর্থাৎ 0.0d
    • টাইপ চরের জন্য, ডিফল্ট মান হ'ল শূন্য অক্ষর, অর্থাৎ '\u0000'
    • টাইপ বুলিয়ানের জন্য, ডিফল্ট মান false
    • সমস্ত রেফারেন্স ধরণের (§4.3), ডিফল্ট মান null

2
এবং লং গুলি এবং পূর্ণসংখ্যার অ্যারের সম্পর্কে কী?
জর্জি ডবরেভ

1
@GeorgyDobrev। সেগুলি রেফারেন্সের ধরণ। তারা উপরের স্পেসিফিকেশন অনুসারে নাল হবে।
ডেভ কোস্টা

স্ট্রিং অ্যারে সম্পর্কে কী?
জ্যাক

1
উপরের মত @ জ্যাক একই, একটি স্ট্রিং একটি অবজেক্ট, সুতরাং অ্যারেতে ডিফল্ট মান হবে null
ডেভ কোস্টা

18

জেএলএস স্পষ্ট করে বলেছে

একটি অ্যারে ইনিশিয়ালাইজার একটি অ্যারে তৈরি করে এবং এর সমস্ত উপাদানগুলির জন্য প্রাথমিক মান সরবরাহ করে।

এবং এটি অ্যারে উদাহরণের পরিবর্তনশীল বা স্থানীয় ভেরিয়েবল বা বর্গ ভেরিয়েবল কিনা তা নির্বিশেষে।

আদিম ধরণের জন্য ডিফল্ট মান: ডক্স

অবজেক্টের জন্য ডিফল্ট মান হয় null


1
প্রশ্নের উত্তর দেয় না। তিনি ডিফল্ট সূচনা সম্পর্কে জিজ্ঞাসা করছেন।
লার্নের মারকুইস

3

জাভা অনুসারে,

ডেটা প্রকার - ডিফল্ট মান

বাইট - 0

সংক্ষিপ্ত - 0

int - 0

দীর্ঘ - 0 এল

ভাসা - 0.0f

ডাবল - 0.0 ডি

চর - '\ u0000'

স্ট্রিং (বা যে কোনও বস্তু) - নাল

বুলিয়ান - মিথ্যা


2
তিনি ক্ষেত্র সম্পর্কে জিজ্ঞাসা করছেন না, তিনি অ্যারের উপাদানগুলি সম্পর্কে জিজ্ঞাসা করছেন।
লার্নের মারকুইস

3
@ এজেপি আপনি কি দয়া করে অ্যারের উপাদানটির অর্থ কী তা ব্যাখ্যা করতে পারবেন ???? সাধারণত অ্যারেতে কিছু উপাত্ত টাইপ থাকে (একই ধরণের) যা উপরে হিসাবে শুরু হয় তাই আপনি দয়া করে আমাকে বলতে পারেন, উপাদানটির গড় ???
অভিষেক সিং

3

থোরবজর্ন রাভন অ্যান্ডারসন বেশিরভাগ ডেটা ধরণের জন্য উত্তর দিয়েছিলেন। অ্যারে সম্পর্কে যেহেতু উত্তপ্ত আলোচনা হয়েছিল,

Jls থেকে বরাত দিয়ে বৈশিষ্ট http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 "অ্যারে উপাদানটি তৈরি হওয়ার সাথে সাথে একটি ডিফল্ট মান দিয়ে আরম্ভ করা হয়"

আমি মনে করি অ্যারে স্থানীয় বা উদাহরণ বা শ্রেণি পরিবর্তনশীল তা নির্বিশেষে এটি ডিফল্ট মান সহ হবে


2

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

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

সুতরাং জাভা অবজেক্ট তৈরি করার সময় এর কনস্ট্রাক্টর পদ্ধতি চালিয়ে অ্যারে শুরু করছে


1

জাভা জানায় যে প্রারম্ভিককরণের সময় কোনও জাএভিএ অ্যারের ডিফল্ট দৈর্ঘ্য 10 হবে।

private static final int DEFAULT_CAPACITY = 10;

তবে size()পদ্ধতিটি অ্যারেতে elementsোকানো উপাদানগুলির সংখ্যা প্রদান করে এবং প্রারম্ভিককরণের সময় থেকে আপনি যদি অ্যারেতে কোনও উপাদান inোকানো না হন তবে এটি শূন্যে ফিরে আসবে।

private int size;

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

public void add(int index, E element) {
    rangeCheckForAdd(index);
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,size - index);
    elementData[index] = element;
    size++;
}

2
এটি অ্যারেলিস্টের মতো দেখায়, অ্যারে নয়।
থরবজর্ন রাভন অ্যান্ডারসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.