Int [] सरणी और int सरणी [] के बीच अंतर


234

मैं हाल ही में एक सरणी को परिभाषित करने के दो तरीकों के बीच अंतर के बारे में सोच रहा हूं:

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

क्या कोई अंतर है?

जवाबों:


281

वे शब्दार्थ समान हैं। int array[]वाक्य रचना केवल मदद C प्रोग्रामर से जोड़ा गया था जावा आदत हो।

int[] array बहुत बेहतर है, और कम भ्रामक है।


55
[] TYPE का हिस्सा है, NAME का नहीं। मेरे लिए, यही सबसे बड़ा अंतर है।
एंड्रे चेल्ला

4
@ और - और सी में, [] घोषणाकर्ता का अपना हिस्सा है, घोषणा निर्दिष्ट नहीं है, इसलिए int array[]वाक्यविन्यास है। साथ ही तार्किक ... कुछ ट्विस्टेड तरीके से। :)
कोस

1
C यह छोटा खेल खेलता है :) और मुझे यह आकर्षक लगता है :) यहां तक ​​कि पसंद ... संकेत के साथ। पॉइंटर्स के लिए 'सही' c सिंटैक्स int * imAPointer है। यह मूर्खतापूर्ण और साफ-सुथरा है।
स्कारलेटअमरंथ 22

4
int array[]मेरे लिए ज्यादा मायने रखता है। इस घोषणा के बारे में आप क्या सोचते हैं? int[] x, y? है yएक सरणी है या नहीं? शायद यह है, शायद यह नहीं है। केवल जावा के गुरु विश्वास के साथ उत्तर दे सकते हैं ....
user1508893

24
के मामले में int[] x, y, yएक सरणी है (क्योंकि []प्रकार के अंतर्गत आता है), और के मामले में int x[], y, yएक सरणी ( []चर के अंतर्गत आता है) नहीं है।
Triang3l

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प्रारूप स्पष्ट है कि चर एक सरणी है (यह क्या है यह जानने के लिए चारों ओर कम दिख रहा है)।

संपादित करें:

ओह रुको एक अंतर है (मैं भूल गया क्योंकि मैं एक समय में एक से अधिक चर घोषित नहीं करता):

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
हालांकि एक पंक्ति में कई पहचानकर्ताओं की घोषणा करने के बजाय प्रति पहचानकर्ता के एक घोषणा का उपयोग करना अच्छा है।
आरएस

@ आरएसपी - पूरी तरह से सहमत हैं, ने एक सर्वोत्तम अभ्यास संपादित किया है। फिर भी, यह सुझाव है कि अच्छा अभ्यास क्या है।
इशरत

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। हालाँकि, पूर्व को पसंद किया जाता है क्योंकि यह सभी प्रकार की जानकारी को एक स्थान पर रखता है। बाद वाला केवल जावा में जाने वाले C / C ++ प्रोग्रामर के लाभ के लिए समर्थित है।


11

कोई वास्तविक अंतर नहीं है; तथापि,

double[] items = new double[10];

पसंद किया जाता है क्योंकि यह स्पष्ट रूप से इंगित करता है कि प्रकार एक सरणी है।


1
डबल आइटम [] वास्तव में सी प्रोग्रामर के लिए वहाँ है
स्टीव कू

@ पहले, यही कारण है कि मैं इसे इस तरह से करता रहूं। :-)
पॉल टॉम्बलिन

एक प्रतिवाद किया जा सकता है कि डबल आइटम [] स्पष्ट रूप से प्रकार को इंगित करता है और बाद में आइटम केवल एक सरणी होने के लिए होता है - यह सब इस बात पर निर्भर करता है कि आप किस चीज के साथ सहज हैं।
MetroidFan2002 6

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

हालाँकि, सम्मेलन इस रूप को हतोत्साहित करता है; कोष्ठक सरणी प्रकार की पहचान करते हैं और प्रकार पदनाम के साथ दिखाई देना चाहिए।

अंतिम पैराग्राफ पर ध्यान दें।

मैं कुछ 3 पार्टी वालों के बजाय आधिकारिक सन / ओरेकल ट्यूटोरियल पढ़ने की सलाह देता हूं। अन्यथा आप बुरी प्रथाओं को सीखने में जोखिम उठाएँगे।


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 ), यह दूसरा संस्करण भी है।
nIcE cOw

2
@nIcEcOw एक पैरामीटर, जैसे varargs String... param, है एक सरणी
बोहेमियन

बस एक साधारण संदेह उत्पन्न होता है, यदि दोनों सरणियाँ हैं, अर्थात स्ट्रिंग [] और स्ट्रिंग ... , then why it is not possible to call a method like say someMethod (1, 2) `यदि कोई परिभाषित कर रहा someMethodहै someMethod ( int[] numbers )। ऐरे की मांग है कि तर्क, सन्निहित स्मृति स्थान से होना चाहिए, हालांकि varargs, पहले दिए गए तर्कों से एक सरणी बना देगा। इसके अलावा, एक varargsविधि का केवल अंतिम तर्क हो सकता है, हालांकि यह एक सरणी के लिए सही नहीं है।
nIcE cOw

2
@nIcEcOw लेकिन आप एक सरणी के साथ एक varargs कह सकते हैं, यानी या meth(int... a)तो के रूप में बुलाया जा सकता है । वरार्स वाक्यगत शर्करा है जो पहले संस्करण को दूसरे संस्करण में बदल देता है। पैरामीटर का वास्तविक (बाइटकोड) प्रकार एक सरणी प्रकार है। अंतिम होने के लिए, यदि आप इसके बारे में सोचते हैं, तो कोई अन्य विकल्प नहीं है। meth(1, 2)meth(new int[] {1, 2})
बोहेमियन

5

इसमें कोई अंतर नहीं है, लेकिन सूर्य ने यहां दिए गए प्रकार के अनुसार इसे लगाने की सिफारिश की है


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

जावा में, ये बस एक ही बात कहने के अलग-अलग सिंटैक्टिक तरीके हैं।


2

वे एक ही हैं। एक दूसरे की तुलना में अधिक पठनीय (कुछ के लिए) है।


2

वे पूरी तरह से समकक्ष हैं। int [] arrayपसंदीदा शैली है। int array[]बस एक समकक्ष, सी-संगत शैली के रूप में प्रदान किया जाता है।


2

दोनों का एक ही अर्थ है। हालाँकि, इन वेरिएंट का अस्तित्व भी इसकी अनुमति देता है:

int[] a, b[];

जो समान है:

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

हालांकि, यह भयानक कोडिंग शैली है और इसे कभी नहीं किया जाना चाहिए।


आपके कहने का मतलब है, int [] a, b []; b एक बहु आयामी सारणी बन जाता है
सदानंद सलाम

2

घोषणा की दोनों शैलियों के बीच कार्यक्षमता में कोई अंतर नहीं है। दोनों ही ऐंट ऑफ एरे घोषित करते हैं।

लेकिन int[] a टाइप जानकारी एक साथ रखता है और अधिक क्रिया है इसलिए मैं इसे पसंद करता हूं।


2

वे समान हैं, लेकिन इन कथनों में एक महत्वपूर्ण अंतर है:

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

1 में। नियमित रूप से एक int है, जैसा कि 2 के विपरीत है। जहां दोनों नियमित और सरणी int के सरणियाँ हैं।

आपके द्वारा दिया गया दूसरा कथन इसलिए पसंद किया जाता है, क्योंकि यह अधिक स्पष्ट है। ओरेकल पर इस ट्यूटोरियल के अनुसार पहला रूप भी हतोत्साहित किया गया है ।


सभी को धन्यवाद! मैं दूसरे के साथ जाऊँगा और उसके साथ रहूँगा।
एस्पेन

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अधिक तार्किक पाते हैं क्योंकि यह एक घोषणा में विभिन्न प्रकारों के चर (यानी एक इंट और एक सरणी) बनाने के लिए नापसंद है (जैसा कि विरोध किया गया) सी-शैली की घोषणा)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.