سؤال

لقد تم مؤخرا أفكر في الفرق بين طرق تحديد مجموعة:

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

هل هناك فرق ؟

هل كانت مفيدة؟

المحلول

فهي لغويا متطابقة.على int array[] بناء الجملة فقط إضافة إلى المساعدة في ج المبرمجين تعتاد على جافا.

int[] array هو الأفضل من ذلك بكثير و أقل مربكة.

نصائح أخرى

هناك فارق واحد بسيط ، إذا كنت يحدث أن يعلن أكثر من متغير واحد في نفس الإعلان:

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.

لا يوجد فرق.

أنا أفضل type[] name شكل هو واضح أن متغير صفيف (أقل أبحث في جميع أنحاء لمعرفة ما هو عليه).

تحرير:

انتظر هناك فرق (نسيت لأنني لم تعلن أكثر من متغير واحد في كل مرة):

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

لا, هذه هي نفسها.ومع ذلك

byte[] rowvector, colvector, matrix[];

يعادل:

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

مأخوذة من مواصفات جافا.وهذا يعني أن

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

مختلفة.لا أنصح أي من هذه متعددة الإعلانات.أسهل للقراءة أن (ربما) يكون:

int[] a;
int[] b;

من القسم 10.2 من لغة جافا مواصفات:

فإن [] قد تظهر كجزء من هذا النوع في بداية الإعلان ، أو كجزء من declarator على متغير معين ، أو كليهما ، كما في هذا المثال:

 byte[] rowvector, colvector, matrix[];

هذا الإعلان هو ما يعادل:

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

شخصيا تقريبا كل رمز جافا رأيت من أي وقت مضى يستخدم النموذج الأول الذي يجعل أكثر منطقية عن طريق الحفاظ على كل نوع المعلومات حول متغير في مكان واحد.أتمنى النموذج الثاني غير مسموح بها, أن نكون صادقين...ولكن هذه هي الحياة...

لحسن الحظ أنا لا أعتقد أنني قد من أي وقت مضى رأيت هذا (صالحة) كود:

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

الأمرين هي نفس الشيء.

يمكنك استخدام بناء الجملة أن تعلن كائنات متعددة:

int[] arrayOne, arrayTwo; //both arrays

int arrayOne[], intOne; //one array one int 

انظر: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

لا فرق.

نقلا عن الشمس:

على [] قد تظهر كجزء من هذا النوع في بداية الإعلان ، أو كجزء من declarator على متغير معين ، أو كليهما ، كما في هذا المثال: byte[] rowvector, colvector, matrix[];

هذا الإعلان هو ما يعادل: byte rowvector[], colvector[], matrix[][];

ليس هناك أي فرق بين الاثنين ؛ سواء تعلن مجموعة من ints.ومع ذلك ، فإن السابق هو المفضل لأنه يحافظ على نوع من المعلومات في مكان واحد.هذا الأخير هو في الواقع سوى الدعم لصالح C/C++ المبرمجين الانتقال إلى جاوة.

لا يوجد فرق حقيقي;ومع ذلك ،

double[] items = new double[10];

المفضل كما أنه يشير بوضوح إلى أن هذا النوع هو صفيف.

كلاهما بنفس القدر صالحة.على 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

غير أن الاتفاقية لا يشجع هذا الشكل ؛ الأقواس تحديد نوع مصفوفة و يجب أن تظهر مع تعيين نوع.

ملاحظة الفقرة الأخيرة.

أوصي قراءة الرسمية الشمس/أوراكل الدروس بدلا من بعض 3rd الطرف منها.كنت خلاف ذلك خطر في نهاية المطاف في التعلم الممارسات السيئة.

وهو بديل النموذج ، الذي كان اقترض من C, عليها جافا القائمة.

والفضول ، هناك ثلاثة طرق تحديد صالحة main طريقة في جاوة:

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

لا يوجد فرق, ولكن الشمس توصي وضعه بجانب نوع كما هو موضح هنا

الخيار الأكثر تفضيلا هو int[] a - لأن int[] هو نوع ، a هو اسم.(2 الخاص بك الخيار هو نفس هذا مع غير محله الفضاء)

عمليا لا يوجد فرق بينهما.

على لغة جافا مواصفات يقول:

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[][];

وبالتالي فإنها سوف تؤدي بالضبط نفس رمز بايت.

في جاوة ، هذه هي ببساطة مختلفة النحوية وأساليب يقولون نفس الشيء.

إنهم نفس.واحد هو أكثر قابلية للقراءة (بعض) من جهة أخرى.

هم تماما ما يعادلها. int [] array هو النمط المفضل. int array[] هو فقط بمثابة معادل ، ج متوافق مع النمط.

كلاهما نفس المعنى.ومع ذلك ، فإن وجود هذه المتغيرات كما يسمح هذا:

int[] a, b[];

الذي هو نفسه:

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

ومع ذلك ، فإن هذا أمر فظيع أسلوب الترميز و لا ينبغي أبدا أن يتم.

لا يوجد فرق في الوظيفة بين كل أنماط من الإعلان.سواء تعلن مجموعة من الباحث.

ولكن int[] a تحافظ على نوع المعلومات معا وأكثر مطول إذا كنت تفضل ذلك.

أنها هي نفسها ، ولكن هناك فارق هام بين هذه التصريحات:

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

في 1.العادية هو مجرد int, بدلا من 2.حيث سواء العادية مجموعة صفائف من الباحث هو.

البيان الثاني لديك ولذلك المفضل, لأنه هو أكثر وضوحا.النموذج الأول هو أيضا تثبيط وفقا هذا البرنامج التعليمي على أوراكل.

كما ذكر من قبل, ليس هناك الكثير من الفرق (إذا قمت بتعريف متغير واحد فقط في كل سطر).

علما بأن SonarQube تعالج الحالة الثانية ثانوي رمز الرائحة:

مجموعة المميزان "[]" ينبغي على نوع غير متغير (الحبار:S1197)

مجموعة المميزان ينبغي أن يكون دائما يقع على نوع أفضل مدونة القراءة.وإلا المطورين يجب أن ننظر في نوع ، اسم المتغير أن تعرف ما إذا كان أو لم يكن هو متغير صفيف.

تتوفر التعليمات البرمجية المثال

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

متوافق مع الحل

int[][] matrix;   // Compliant

نعم, بالضبط نفس الشيء.وأنا شخصيا أفضل

int[] integers; 

لأنه يجعل من الواضح على الفور أن أي شخص يقرأ التعليمات البرمجية التي الأعداد الصحيحة هي مجموعة من الباحث ، مقابل

int integers[];

التي لا تجعل من كل هذا واضح, لا سيما إذا كان لديك العديد من الإعلانات في سطر واحد.ولكن مرة أخرى, فهي ما يعادلها ، حتى أنه يأتي إلى أسفل إلى تفضيل شخصي.

تحقق من هذه صفحة عن المصفوفات في جافا لمزيد من العمق في الأمثلة.

عندما يعلن واحدة مجموعة مرجعية ، ليس هناك فرق كبير بينهما.حتى التاليين الإعلانات نفسها.

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

وكلاهما موافق.أقترح أن تختار واحدة و العصا معه.(أنا لا ثانية واحدة)

في حين int integers[] حل جذور في لغة C (ويمكن وهكذا تعتبر "طبيعية" النهج) ، يجد كثير من الناس int[] integers أكثر منطقية كما يسمح لخلق المتغيرات من أنواع مختلفة (أيالباحث ومجموعة) في إعلان واحد (بدلا ج-أسلوب الإعلان).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top