Yanıtlar:
Anlamsal olarak aynıdırlar. int array[]
Sözdizimi sadece java alışması yardım C programcıları eklendi.
int[] array
çok tercih edilir ve daha az kafa karıştırıcıdır.
int array[]
sözdizimi. Ayrıca mantıklı ... bir şekilde bükülmüş. :)
int array[]
bana daha mantıklı geliyor. Bu bildiri hakkında ne düşünüyorsun? int[] x, y
? Mı y
bir dizi veya olmasın? Belki öyle, belki değil. Sadece Java'nın guruları güvenle cevap verebilir ....
int[] x, y
, y
(nedeniyle bir dizi []
türüne ait olan), ve söz konusu olduğunda int x[], y
, y
bir dizi (değildir []
değişkene ait).
Aynı beyanda birden fazla değişken bildirirseniz, küçük bir fark vardır:
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
Derleyici kullanmaya çalıştığınız anda neredeyse kesinlikle hatalarınızı yakalayacaktır, ancak bunun kötü kodlama stili olduğunu unutmayın d
.
Fark yok.
Ben type[] name
biçiminde değişken bir dizi (daha az ne olduğunu bulmak için etrafa) açıktır tercih ederim .
DÜZENLE:
Oh bekleyin bir fark var (çünkü bir kerede birden fazla değişken asla beyan etmediğim için unuttum):
int[] foo, bar; // both are arrays
int foo[], bar; // foo is an array, bar is an int.
Hayır, bunlar aynı. ancak
byte[] rowvector, colvector, matrix[];
şuna eşittir:
byte rowvector[], colvector[], matrix[][];
Java Spesifikasyonundan Alınmıştır . Bu şu demek oluyor
int a[],b;
int[] a,b;
farklıdır. Ben bu birden fazla bildirimlerin hiçbirini tavsiye etmem. Okunması en kolay (muhtemelen) şöyle olacaktır:
int[] a;
int[] b;
Gönderen Java Dil Şartname bölüm 10.2 :
[], Bildirimin başlangıcında türün bir parçası olarak veya bu örnekte olduğu gibi belirli bir değişken için ya da her ikisinin de bildirgesinin bir parçası olarak görünebilir:
byte[] rowvector, colvector, matrix[];
Bu beyan şuna eşdeğerdir:
byte rowvector[], colvector[], matrix[][];
Şahsen gördüğüm hemen hemen tüm Java kodları, ilk form kullanır, bu da değişkenle ilgili tüm tür bilgileri tek bir yerde tutarak daha mantıklıdır. Keşke ikinci forma izin verilmedi, dürüst olmak gerekirse ... ama hayat böyle ...
Neyse ki şimdiye kadar bu (geçerli) kodu gördüğümü sanmıyorum :
String[] rectangular[] = new String[10][10];
int[] a[];
- bu asla net olmayacak ;-)
İki komut aynı şeydir.
Sözdizimini birden çok nesne bildirmek için kullanabilirsiniz:
int[] arrayOne, arrayTwo; //both arrays
int arrayOne[], intOne; //one array one int
bkz. http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html
Fark yok.
Güneş'ten Alıntı :
Bu
[]
, bildirimin başlangıcında türün bir parçası olarak veya bu örnekte olduğu gibi belirli bir değişkenin veya her ikisinin de bildirgesinin bir parçası olarak görünebilir:byte[] rowvector, colvector, matrix[];
Bu beyan şuna eşdeğerdir:
byte rowvector[], colvector[], matrix[][];
İkisi arasında fark yoktur; her ikisi de bir dizi int
s bildirir. Bununla birlikte, birincisi, tip bilgisini tek bir yerde tuttuğu için tercih edilir. İkincisi sadece Java'ya taşınan C / C ++ programcılarının yararına desteklenir.
Gerçek bir fark yok; ancak,
double[] items = new double[10];
türün bir dizi olduğunu açıkça belirttiği için tercih edilir.
Her ikisi de eşit derecede geçerlidir. int puzzle[]
Bir şekilde, ancak önerilmez int[] puzzle
göre tercih edilen kodlama sözleşmeler . Ayrıca resmi Java dizileri eğiticisine de bakın :
Benzer şekilde, diğer türlerdeki dizileri de bildirebilirsiniz:
byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings;
Köşeli parantezleri dizinin adından sonra da yerleştirebilirsiniz:
float anArrayOfFloats[]; // this form is discouraged
Ancak, sözleşme bu formu caydırır; köşeli ayraçlar dizi türünü tanımlar ve tür tanımıyla birlikte görünmelidir.
Son paragrafı not edin.
Bazı üçüncü taraflardan ziyade resmi Sun / Oracle derslerini okumanızı tavsiye ederim. Aksi takdirde kötü uygulamaları öğrenme riskiniz olacaktır.
Java'nın ödünç alındığı alternatif bir formdur C
.
Bir merak olarak, java'da geçerli bir yöntem tanımlamanın üç yolu vardır main
:
public static void main(String[] args)
public static void main(String args[])
public static void main(String... args)
public static void main ( String \u005B \u005D args )
bu da başka bir varyanttır.
String... param
, olduğu bir dizi
, then why it is not possible to call a method like say
`bir tanımlama ise birYöntem (1, 2) someMethod
olarak someMethod ( int[] numbers )
. Diziler, bağımsız değişkenin bitişik bellek konumundan olması gerektiğini, ancak varargs
önce verilen bağımsız değişkenlerden bir dizi oluşturmasını ister. Dahası, a varargs
bir yöntemin yalnızca son argümanı olabilir, ancak aynı şey bir dizi için geçerli değildir.
meth(int... a)
ya meth(1, 2)
ya olarak adlandırılabilir meth(new int[] {1, 2})
. Varargs, ilk versiyonu ikinci versiyona dönüştüren sözdizimsel şekerdir. Parametrenin gerçek (bayt kodu) türü bir dizi türüdür. Sonuncu olmak gerekirse, bunu düşünürseniz, başka aklı başında seçim yok.
Java Dil Özellikleri diyor ki:
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[][];
Böylece tam olarak aynı bayt koduyla sonuçlanırlar.
Tamamen eşdeğerdirler. int [] array
tercih edilen stildir. int array[]
sadece eşdeğer, C uyumlu bir stil olarak sağlanır.
Her ikisi de aynı anlama sahiptir. Bununla birlikte, bu varyantların varlığı da buna izin verir:
int[] a, b[];
ki aynı:
int[] a;
int[][] b;
Ancak, bu korkunç bir kodlama tarzıdır ve asla yapılmamalıdır.
Aynılar, ancak bu ifadeler arasında önemli bir fark var:
// 1.
int regular, array[];
// 2.
int[] regular, array;
1. normalde, hem normal hem de dizi int dizileri olduğu 2. yerine, sadece bir int.
Bu nedenle, sahip olduğunuz ikinci ifade daha açık olduğu için tercih edilir. İlk form, Oracle hakkındaki bu eğiticiye göre de önerilmez .
Daha önce de belirtildiği gibi, çok fazla fark yoktur (satır başına sadece bir değişken bildirirseniz).
O Not SonarQube küçük olarak ikinci durumda davranır kod kokusu:
Dizi belirteçleri "[]" değişken üzerinde değil tipte olmalıdır (kalamar: S1197)
Daha iyi kod okunabilirliği için dizi belirleyicileri her zaman türün üzerine yerleştirilmelidir. Aksi takdirde, geliştiricilerin bir değişkenin dizi olup olmadığını öğrenmek için hem türe hem de değişken adına bakması gerekir.
Uyumsuz Kod Örneği
int matrix[][]; // Noncompliant int[] matrix[]; // Noncompliant
Uyumlu Çözüm
int[][] matrix; // Compliant
Evet, tamamen aynı. Şahsen ben tercih ederim
int[] integers;
çünkü kodunuzu okuyan herkesin tamsayıların bir dizi int olduğunu açıkça gösterir.
int integers[];
özellikle de bir satırda birden fazla bildirim varsa, bu kadar açık değildir. Ama yine, eşdeğerler, bu yüzden kişisel tercih geliyor.
Daha ayrıntılı örnekler için Java'daki dizilerdeki bu sayfaya göz atın .
tek bir dizi başvurusu bildirilirken, aralarında çok fazla fark yoktur. aşağıdaki iki beyan aynıdır.
int a[]; // comfortable to programmers who migrated from C/C++
int[] a; // standard java notation
birden fazla dizi referansı bildirirken, aralarında fark bulabiliriz. Aşağıdaki iki ifade aynı anlama gelir. aslında takip eden programcıya kalmıştır. ancak standart java notasyonu önerilir.
int a[],b[],c[]; // three array references
int[] a,b,c; // three array references