SORU
9 AĞUSTOS 2010, PAZARTESİ


java: bu nedir: [Ljava.lang.Nesne;?

Bir işlev çağrısı alınan bir nesne üzerinde toString aradığımda bu olsun. Nesne türü bu dize kodlanmış olduğunu biliyorum, ama nasıl okunacağını bilmiyorum. Bu tür kodlama ne denir?

CEVAP
9 AĞUSTOS 2010, PAZARTESİ


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

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

Eğer bu sınıftan bir nesne dizisi yazın değil, bir başvuru türü temsil ediyorsa sınıf ikili adı Java Dil Şartnamesi (§13.1) belirttiği gibi döndürülür.

Eğer bu sınıf nesnesini ilkel bir tür ya da void, daha sonra adı verilen temsil ediyorsa Java dili temel türü için anahtar kelime ilgili veya void.

Eğer bu nesne sınıfı temsil eden bir sınıf dizileri, sonra iç formun adını içerir adını unsuru tür koyarak, bir veya daha fazla '[' karakter derinliğini temsil eden bir dizi iç içe geçmiş. Öğe türü adları kodlama 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;

İş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

Diziler toString() yöntemi bu biçimde String iade sebebi diziler @Override yöntemi aşağıdaki gibi belirtilir: Object, miras olmasıdır

toString method for class Object bir dize döndürür oluşan Adı Sınıf olan bir nesne örneği,-işareti karakteri ` @ ' ve işaretsiz onaltılık gösterimi karma kod nesne. Diğer bir deyişle, bu yöntem bir dize değerine eşit verir:

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

Not: edebildikleri için herhangi bir rasgele nesne toString() yukarıdaki şartname takip itimat edemez (ve genellikle yapmak) @Override başka bir şey dönmek. Daha güvenilir bir şekilde teftiş türünde bir rasgele nesne çağırmak için getClass() (final yöntem devralınan Object) ve reflecting iade Class nesne. İdeal olarak, olsa da, API yansıması gerekli değildir (bkz . böyle tasarlanmış olmalıydı ^em>Etkili Java 2. Baskı, Madde 53: yansıma . arayüzleri Tercih ).


Bir daha "" diziler . toString yararlı

java.util.Arrays ilkel diziler ve Object[] toString aşırı sağlar. İç içe diziler için kullanmak isteyebilirsiniz o da deepToString var.

İş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]]

Ayrıca Arrays.equals ve dizi eşitlik elemanları, dizi ile ilgili birçok yardımcı yöntemler arasında karşılaştırma yapmak Arrays.deepEquals vardır.

İlgili sorular

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CNNMoney

    CNNMoney

    16 Kasım 2006
  • HereWeStayKings

    HereWeStayKi

    3 NİSAN 2013
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009