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.Class
dizisinin 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 String
diziler yok çünkü bu biçimde olduğu @Override
miras yöntemini Object
şöyle belirtilir:
toString
Sı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@Override
bunu 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(final
miras 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 ).
toString
Diziler için daha "kullanışlı" birjava.util.Arrays
toString
ilkel 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.equals
ve Arrays.deepEquals
bir çok başka dizi-ilgili yardımcı program yöntemleri arasında kendi elemanlar ile dizi eşitlik karşılaştırma yapar.