Bu nedir: [Ljava.lang.Object ;?


110

Bunu toString, bir işlev çağrısından aldığım bir nesneyi çağırdığımda alıyorum. Nesnenin türünün bu dizede kodlandığını biliyorum, ancak onu nasıl okuyacağımı bilmiyorum.

Bu tür kodlamaya ne denir?

Yanıtlar:


211

[Ljava.lang.Object;adıdır Object[].class, java.lang.Classdizisinin sınıfını temsil eden Object.

Adlandırma şeması şu şekilde belgelenmiştir Class.getName():

Bu sınıf nesnesi, dizi türü olmayan bir başvuru türünü temsil ediyorsa, Java Dil Belirtimi'nde ( §13.1 ) belirtildiği gibi, sınıfın ikili adı döndürülür .

Bu sınıf nesnesi ilkel bir türü temsil ediyorsa veya void, döndürülen ad, ilkel türe karşılık gelen Java dili anahtar sözcüğüdür veya void.

Bu sınıf nesnesi bir dizi sınıfını temsil ediyorsa, o zaman adın dahili biçimi '[', dizi iç içe geçme derinliğini temsil eden bir veya daha fazla karakterden önce gelen öğe türünün adından oluşur . Öğe türü adlarının kodlaması aşağıdaki gibidir:

Element Type        Encoding
boolean             Z
byte                B
char                C
double              D
float               F
int                 I
long                J
short               S 
class or interface  Lclassname;

Bu listedeki son kişi seninki. İşte bazı örnekler:

// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx

Nedeni toString()diziler getirilerine yöntem Stringdiziler yok çünkü bu biçimde olduğu @Overridemiras yöntemini Objectşöyle belirtilir:

toStringSınıfı için bir yöntemObject nesnesi bir örneği, en işareti karakter 'olduğu sınıf adına oluşan bir dizi @ ve nesnenin karma kod işaretsiz onaltılık döndürür. Başka bir deyişle, bu yöntem şunun değerine eşit bir dize döndürür:

getClass().getName() + '@' + Integer.toHexString(hashCode())

Not :toString()Herhangi bir rastgele nesnenin yukarıdaki spesifikasyona uyacağınagüvenemezsiniz, çünkü onlar@Overridebunu başka bir şey döndürmek içinyapabilirler (ve genellikle yaparlar). Rasgele bir nesnenin türünü incelemenin daha güvenilir yolugetClass(), onuçağırmak(finalmiras alınanbiryöntemObject) ve sonradöndürülennesneyi yansıtmaktırClass . İdeal olarak, API, yansıma gerekmeyecek şekilde tasarlanmış olmalıdır (bkz. Etkili Java 2. Baskı, Madde 53: Yansımaya arayüzleri tercih edin ).


toStringDiziler için daha "kullanışlı" bir

java.util.ArraystoStringilkel diziler için aşırı yüklemeler sağlar ve Object[]. deepToStringİç içe diziler için kullanmak isteyebileceğiniz de vardır.

İşte bazı örnekler:

int[] nums = { 1, 2, 3 };

System.out.println(nums);
// [I@xxxxx

System.out.println(Arrays.toString(nums));
// [1, 2, 3]

int[][] table = {
        { 1, },
        { 2, 3, },
        { 4, 5, 6, },
};

System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]

System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]

Orada da Arrays.equalsve Arrays.deepEqualsbir çok başka dizi-ilgili yardımcı program yöntemleri arasında kendi elemanlar ile dizi eşitlik karşılaştırma yapar.

İlgili sorular

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.