ইনট [] অ্যারে এবং ইনট অ্যারের মধ্যে পার্থক্য []


234

আমি সম্প্রতি অ্যারের সংজ্ঞা দেওয়ার দুটি পদ্ধতির মধ্যে পার্থক্য সম্পর্কে ভাবছিলাম:

  1. int[] array
  2. int array[]

পার্থক্য আছে কি?

উত্তর:


281

তারা শব্দার্থগতভাবে অভিন্ন। int array[]সিনট্যাক্স শুধুমাত্র সাহায্যের সি প্রোগ্রামারদের যোগ করা হয়েছিল জাভা ব্যবহার করতে পারেন।

int[] array এটি অনেক বেশি পছন্দনীয় এবং কম বিভ্রান্তিকর।


55
[] টিওয়াইপিইয়ের অংশ, NAME এর নয়। আমার জন্য, এটিই সবচেয়ে বড় পার্থক্য।
আন্দ্রে চেল্লা

4
@ আন্ড্রে - এবং সিতে, []] এর ঘোষণাকারীর অংশ, ঘোষণাপত্রের নির্দিষ্টকরণকারী নয়, তাই int array[]বাক্য গঠন। যৌক্তিকও ... কিছুটা বাঁকানো পথে। :)
কোস

1
সি এই ছোট খেলাটি খেলে :) এবং আমি এটি আকর্ষণীয় মনে করি :) এমনকি ... পয়েন্টার সহ with পয়েন্টারগুলির জন্য 'সঠিক' সি বাক্য গঠনটি হ'ল ইন * ইম্পেইপয়েন্টার। এটা নির্বোধ এবং ঝরঝরে।
স্কারলেটআমরান্থ

4
int array[]আমাকে আরও বোধ করে। আপনি এই ঘোষণা সম্পর্কে কি মনে করেন? int[] x, y? কি yএকটি অ্যারের কি না? হতে পারে, সম্ভবত এটি না। কেবল জাভার গুরুরা আত্মবিশ্বাসের সাথে উত্তর দিতে পারে ....
ব্যবহারকারীর508893

24
এর ক্ষেত্রে int[] x, y, yএকটি অ্যারে (কারণ []প্রকারের সাথে সম্পর্কিত), এবং এর ক্ষেত্রে int x[], y, yএকটি অ্যারে নয় ( []ভেরিয়েবলের অন্তর্গত)।
ট্রায়ানগ

171

একটি সামান্য পার্থক্য আছে, যদি আপনি একই ঘোষণায় একাধিক ভেরিয়েবল ঘোষণা করেন:

int[] a, b;  // Both a and b are arrays of type int
int c[], d;  // WARNING: c is an array, but d is just a regular int

মনে রাখবেন এটি খারাপ কোডিং স্টাইল, যদিও সংকলকটি অবশ্যই আপনি ব্যবহার করার চেষ্টা করার মুহুর্তটি প্রায়শই আপনার ত্রুটিটি ধরবে d


52

এখানে কোন পার্থক্য নেই.

আমি পছন্দ করি type[] nameফর্ম্যাটটি পরিষ্কার যে ভেরিয়েবলটি একটি অ্যারে (এটি কী তা সন্ধান করার জন্য চারপাশে তাকাতে হবে) clear

সম্পাদনা করুন:

ওহ অপেক্ষা করুন কিছু পার্থক্য রয়েছে (আমি ভুলে গিয়েছি কারণ আমি একবারে একাধিক ভেরিয়েবল ঘোষণা করি না):

int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.

27

না, এগুলি একই রকম। যাহোক

byte[] rowvector, colvector, matrix[];

সমান:

byte rowvector[], colvector[], matrix[][];

জাভা স্পেসিফিকেশন থেকে নেওয়া । এটার মানে হচ্ছে

int a[],b;
int[] a,b;

ভিন্ন. আমি এই একাধিক ঘোষণার সুপারিশ করব না। সবচেয়ে সহজে পড়তে হবে (সম্ভবত):

int[] a;
int[] b;

3
তবে এক লাইনে একাধিক শনাক্তকারী ঘোষণার পরিবর্তে সনাক্তকারী প্রতি একটি ঘোষণা ব্যবহার করা ভাল অনুশীলন।
আরএসপি 2'10

@rsp - সম্পূর্ণরূপে সম্মত হন, একটি সেরা অনুশীলন সম্পাদনা করেছেন Still তবুও, এটি ভাল অনুশীলন কী তা বোঝাই tive
ইশতার

25

জাভা ভাষা নির্দিষ্টকরণের বিভাগ 10.2 থেকে :

[]] ঘোষণার শুরুতে প্রকারের অংশ হিসাবে, বা কোনও নির্দিষ্ট পরিবর্তনশীল, বা উভয়ের জন্য ঘোষকের অংশ হিসাবে, যেমন এই উদাহরণ হিসাবে প্রদর্শিত হতে পারে:

 byte[] rowvector, colvector, matrix[];

এই ঘোষণাটি সমান:

byte rowvector[], colvector[], matrix[][];

ব্যক্তিগতভাবে আমি দেখেছি প্রায় সব জাভা কোডই প্রথম ফর্মটি ব্যবহার করে যা ভেরিয়েবল সম্পর্কিত সমস্ত প্রকারের তথ্য এক জায়গায় রেখে আরও বেশি অর্থবোধ করে। আমি চাই দ্বিতীয় রূপটি যদি অস্বীকার না করা হয়, সত্যি কথা বলতে ... তবে এটাই জীবন ...

ভাগ্যক্রমে আমি কখনই এই (বৈধ) কোডটি দেখেছি বলে মনে করি না :

String[] rectangular[] = new String[10][10];

ধন্যবাদ, আমি এই সম্পর্কে আমার মাথা আঁচড়ান। আশ্চর্যের বিষয়, প্রশ্নের শিরোনাম গুগল করার সময় আমি কিছুই পাইনি ...
Yoav

3
+1 আমি দ্বিতীয় ফর্মটি অস্বীকার করার বিষয়ে একমত। +1 এছাড়াও কারণ আমি বুঝতে পারি নি যে আপনি 'এন' ম্যাচটি মিশ্রণ করতে পারেন int[] a[];- এটি কখনই অস্পষ্ট হতে পারে না ;-)
বোহেমিয়ান


13

কোনও পার্থক্য নেই।

সূর্য থেকে উদ্ধৃতি :

[]এই উদাহরণে হিসাবে, প্রদর্শিত হতে পারে ঘোষণার শুরুতে টাইপ অংশ হিসেবে বা একটি নির্দিষ্ট পরিবর্তনশীল, অথবা উভয় জন্য declarator অংশ হিসেবে:byte[] rowvector, colvector, matrix[];

এই ঘোষণাটি সমান: byte rowvector[], colvector[], matrix[][];


11

দুজনের মধ্যে কোনও পার্থক্য নেই; উভয় intএস এর অ্যারে ঘোষণা । তবে প্রাক্তনটিকে পছন্দ করা হয় কারণ এটি টাইপ তথ্যকে এক জায়গায় রাখে। পরেরটি কেবল জা / তে সি / সি ++ প্রোগ্রামারদের সুবিধার জন্য সমর্থিত।


11

কোন বাস্তব পার্থক্য আছে; যাহোক,

double[] items = new double[10];

এটি পছন্দসই হিসাবে এটি স্পষ্টভাবে নির্দেশ করে যে টাইপটি একটি অ্যারে।


1
ডাবল আইটেম [] সত্যিই সি প্রোগ্রামারদের জন্য রয়েছে
স্টিভ কুও

@ স্টিভ, এই কারণেই আমি অবশ্যই সেভাবেই চালিয়ে যাচ্ছি। :-)
পল টমবলিন

একটি পাল্টা পরামর্শ দেওয়া যেতে পারে যে দ্বিগুণ আইটেমগুলি [] স্পষ্টভাবে টাইপটি এবং পরে যে আইটেমগুলি কেবল অ্যারে হিসাবে ঘটেছিল তা নির্দেশ করে - এটি সমস্ত কিসে আপনি আরামদায়ক তার উপর নির্ভর করে।
MetroidFan2002

7

উভয়ই সমানভাবে বৈধ। তবে int puzzle[]ফর্মটি নিরুৎসাহিত int[] puzzleকরা হয়েছে, কোডিং কনভেনশন অনুসারে এটিকে অগ্রাধিকার দেওয়া হয়েছে । সরকারী জাভা অ্যারে টিউটোরিয়ালটিও দেখুন :

একইভাবে, আপনি অন্যান্য ধরণের অ্যারে ঘোষণা করতে পারেন:

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

আপনি অ্যারের নামের পরে বর্গাকার বন্ধনীগুলিও রাখতে পারেন:

float anArrayOfFloats[]; // this form is discouraged

তবে কনভেনশন এই ফর্মটিকে নিরুৎসাহিত করে; বন্ধনীগুলি অ্যারের প্রকারটি সনাক্ত করে এবং প্রকারের উপাধি সহ প্রদর্শিত হবে।

শেষ অনুচ্ছেদে নোট করুন।

আমি কয়েকটি তৃতীয় পক্ষের চেয়ে অফিসিয়াল সান / ওরাকল টিউটোরিয়ালগুলি পড়ার পরামর্শ দিচ্ছি। আপনি অন্যথায় খারাপ অভ্যাস শিখতে ঝুঁকি হবে।


6

এটি একটি বিকল্প রূপ, যা থেকে ধার করা হয়েছিল C, যার ভিত্তিতে জাভা ভিত্তিক।

কৌতূহল হিসাবে, জাভাতে একটি কার্যকর পদ্ধতি সংজ্ঞায়িত করার জন্য তিনটি উপায় রয়েছে main:

  • public static void main(String[] args)
  • public static void main(String args[])
  • public static void main(String... args)

1
যথাযোগ্য সম্মানের সাথে, তবে এই উত্তরটি কি প্রশ্ন !!!!! তৃতীয় ফর্মটি কি নির্দিষ্ট করে বলা হয়েছে, মূল পোস্টে যা চাওয়া হচ্ছে তা দিয়ে আসলে কিছু করতে হবে। প্রথম দুটি আর্গুমেন্ট মূল পদ্ধতিতে অ্যারে হয়, যদিও তৃতীয় সত্তাটি একটি চলক যুক্তি (যা অ্যারের মতো নয়)। যদি প্রধান পদ্ধতিটি সংজ্ঞায়িত করা প্রশ্ন হয় তবে কোনও একটি প্রধান পদ্ধতিও সংজ্ঞায়িত করতে অন্য ফর্ম যুক্ত করতে পারে, যেমন public static void main ( String \u005B \u005D args )এটিও অন্যরকম বৈকল্পিক।
শে

2
@nIcEcOw একটি প্যারামিটার যেমন ভারার্গস String... param, হয় একটি অ্যারের
বোহেমিয়ান

শুধু একটি সহজ সন্দেহ জাগে, যদি উভয় অ্যারে হয় অর্থাত স্ট্রিং [] এবং স্ট্রিং ... , then why it is not possible to call a method like say someMethod (1, 2) `যদি এক সংজ্ঞা করা হয় someMethodযেমন someMethod ( int[] numbers )। অ্যারেগুলি দাবি করে যে আর্গুমেন্টটি অবশ্যই মেনে চলার স্মৃতি অবস্থান থেকে হওয়া উচিত, তবে varargsপ্রথমে সরবরাহ করা যুক্তিগুলির মধ্যে একটি অ্যারে তৈরি করবে। তদতিরিক্ত, একটি varargsকেবল কোনও পদ্ধতির চূড়ান্ত যুক্তি হতে পারে, যদিও এটি অ্যারের ক্ষেত্রে একই নয়।
নি

2
@nIcEcOw তবে আপনি একটি অ্যারে দিয়ে একটি ভারার্গস কল করতে পারেন, অর্থাত্ meth(int... a)হয় হয় meth(1, 2)বা বলা যেতে পারে meth(new int[] {1, 2})। ভারারগস সিনট্যাকটিক চিনি যা প্রথম সংস্করণকে দ্বিতীয় সংস্করণে রূপান্তরিত করে। প্যারামিটারের প্রকৃত (বাইটকোড) প্রকারটি একটি অ্যারের প্রকার। শেষ হতে হবে, আপনি যদি এটি সম্পর্কে চিন্তা করেন, অন্য কোনও বুদ্ধিমান পছন্দ নেই।
বোহেমিয়ান


3

সর্বাধিক পছন্দের বিকল্পটি int[] a- কারণ int[]এটি টাইপ, এবং aনাম। (আপনার দ্বিতীয় বিকল্পটি ভুল জায়গায় স্থান সহ একই রকম)

কার্যত তাদের মধ্যে কোন পার্থক্য নেই।


3

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

The [] may appear as part of the type at the beginning of the declaration,
or as part of the declarator for a particular variable, or both, as in this
example:

byte[] rowvector, colvector, matrix[];

This declaration is equivalent to:

byte rowvector[], colvector[], matrix[][];

সুতরাং তারা ঠিক একই বাইট কোড ফলাফল করবে।


2

জাভাতে, এগুলি একই জিনিস বলার জন্য বিভিন্ন সিন্ট্যাক্টিক পদ্ধতি methods


2

তারা একই। একটি অন্যের চেয়ে বেশি পাঠযোগ্য (কারও কাছে)।


2

তারা সম্পূর্ণ সমতুল্য। int [] arrayপছন্দসই শৈলী। int array[]কেবল একটি সমতুল্য, সি-সামঞ্জস্যপূর্ণ শৈলী হিসাবে সরবরাহ করা হয়।


2

দুজনেরই একই অর্থ। যাইহোক, এই বৈকল্পিকগুলির অস্তিত্বও এটিকে মঞ্জুরি দেয়:

int[] a, b[];

যা একই:

int[] a;
int[][] b;

তবে এটি ভয়াবহ কোডিং শৈলী এবং কখনই করা উচিত নয়।


আপনি বলতে চাইছেন, int [] a, b []; বি একটি বহুমাত্রিক অ্যারে হয়ে যায়
সদানন্দ সালাম

2

ঘোষণার উভয় শৈলীর মধ্যে কার্যকারিতার মধ্যে কোনও পার্থক্য নেই। উভয়ই int এর অ্যারে ঘোষণা করে।

তবে int[] a টাইপ তথ্য একসাথে রাখে এবং আরও ভার্বোস হয় তাই আমি এটি পছন্দ করি।


2

এগুলি একই, তবে এই বিবৃতিগুলির মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে:

// 1.
int regular, array[];
// 2.
int[] regular, array;

নিয়মিত হ'ল কেবল একটি ইনট, 2 এর বিপরীতে যেখানে নিয়মিত এবং অ্যারে উভয়ই ইন্টের অ্যারে হয়।

আপনার কাছে দ্বিতীয় বিবৃতিটি তাই বেশি পছন্দসই, কারণ এটি আরও স্পষ্ট। ওরাকলের এই টিউটোরিয়াল অনুসারে প্রথম ফর্মটিও নিরুৎসাহিত করা হয়েছে ।


থ্যাঙ্কস সব! আমি দ্বিতীয়টির সাথে যাব এবং এটির সাথে লেগে যাব।
এসপেন

2

ইতিমধ্যে যেমন বলা হয়েছে, তেমন কোনও পার্থক্য নেই (যদি আপনি প্রতি লাইনে কেবল একটি পরিবর্তনশীল ঘোষণা করেন)।

নোট করুন যে সোনারকিউব আপনার দ্বিতীয় কেসটিকে একটি গৌণ কোড গন্ধ হিসাবে গণ্য করে :

অ্যারে ডিজাইনারদের "[]" ধরণের হওয়া উচিত, পরিবর্তনশীল নয় (স্কুইড: S1197)

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

অসম্পূর্ণ কোড উদাহরণ

int matrix[][];   // Noncompliant
int[] matrix[];   // Noncompliant

কমপ্লায়েন্ট সলিউশন

int[][] matrix;   // Compliant

1

হ্যাঁ, ঠিক একই। ব্যক্তিগতভাবে, আমি পছন্দ করি

int[] integers; 

কারণ এটি আপনার কোডটি পড়ার সাথে সাথেই তা স্পষ্ট করে দেয় যে পূর্ণসংখ্যাগুলি ইন্টের একটি অ্যারে, বিপরীতে

int integers[];

যা এটিকে সমস্ত স্পষ্ট করে না, বিশেষত যদি আপনার এক লাইনে একাধিক ঘোষণা থাকে। কিন্তু আবার, তারা সমান, তাই এটি ব্যক্তিগত পছন্দ নেমে আসে।

পরীক্ষা করে দেখুন জাভা অ্যারে এ এই পৃষ্ঠাটিতে গভীরতা উদাহরণ আরও জন্য।


1

একটি একক অ্যারে রেফারেন্স ঘোষণা করার সময়, তাদের মধ্যে খুব বেশি পার্থক্য নেই। সুতরাং নিম্নলিখিত দুটি ঘোষণা একই।

int a[];  // comfortable to programmers who migrated from C/C++
int[] a;  // standard java notation 

একাধিক অ্যারে রেফারেন্স ঘোষণা করার সময়, আমরা তাদের মধ্যে পার্থক্য খুঁজে পেতে পারি। নিম্নলিখিত দুটি বিবৃতি একই অর্থ। আসলে, এটি প্রোগ্রামার উপর নির্ভর করে যা অনুসরণ করা হয়। তবে মানক জাভা স্বরলিপিটি সুপারিশ করা হয়।

int a[],b[],c[]; // three array references
int[] a,b,c;  // three array references

0

দুটোই ঠিক আছে। আমি একটি বাছাই এবং এটি বদ্ধ পরামর্শ। (আমি দ্বিতীয়টি করি)


0

যদিও int integers[]সি ল্যাঙ্গুয়েজ সমাধান শিকড় (এবং এইভাবে "স্বাভাবিক" পদ্ধতির বিবেচনা করা যেতে পারে) অনেকেই এটি int[] integersযেমন বিভিন্ন ধরনের ভেরিয়েবল তৈরি করতে নামঞ্জুর করে আরো যৌক্তিক (অর্থাত কোন int এবং একটি অ্যারে) এক ঘোষণা (যেমন বিরোধিতা মধ্যে সি-স্টাইলের ঘোষণা)।

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