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?
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:
[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 veyavoid.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öntemObjectnesnesi 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ı" birjava.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.