Gdzie jest zdefiniowana właściwość długości tablicy?
Możemy określić długość {[2] } używając jego publicznej metody size()
, Jak
ArrayList<Integer> arr = new ArrayList(10);
int size = arr.size();
Podobnie możemy określić długość obiektu Array
za pomocą właściwości length
String[] str = new String[10];
int size = str.length;
Podczas gdy size()
metoda ArrayList
jest zdefiniowana wewnątrz klasy ArrayList
, gdzie jest TA length
właściwość Array
zdefiniowana?
7 answers
Tablice są specjalnymi obiektami w Javie, mają prosty atrybut o nazwie length
czyli final
.
Nie ma "definicji klasy" tablicy (nie można jej znaleźć w żadnej .class file), są częścią samego języka.
10.7. Array Members
Członkowie typu tablicy są następujące:
- The
public
final
polelength
, które zawiera liczbę składników tablicy.length
może być dodatnia lub zerowa.Metoda
Klon wielowymiarowej tablicy jest płytki, co oznacza, że tworzy tylko jedną nową tablicę. Subarrays są wspólne.public
clone
, która nadpisuje metodę o tej samej nazwie w klasieObject
i nie wyrzuca zaznaczonych WYJĄTKÓW. Zwracanym typem metodyclone
typu tablicyT[]
jestT[]
.- Wszystkie elementy dziedziczone z klasy
Object
; jedyną metodąObject
, która nie jest dziedziczona, jest jej metodaclone
.
Zasoby:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-28 10:20:23
Jest w zasadzie" specjalny", z własną instrukcją bajtową: arraylength
. Więc ta metoda:
public static void main(String[] args) {
int x = args.length;
}
Jest skompilowany do kodu bajtowego w następujący sposób:
public static void main(java.lang.String[]);
Code:
0: aload_0
1: arraylength
2: istore_1
3: return
Więc nie ma dostępu, jakby było normalnym polem. W rzeczywistości, jeśli spróbujesz uzyskać to tak, jakby było normalnym polem, jak to, to się nie powiedzie:
// Fails...
Field field = args.getClass().getField("length");
System.out.println(field.get(args));
Więc niestety, opis JLS każdego typu tablicy posiadającego publiczne pole końcowe length
jest nieco mylący :(
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 17:15:40
Jest zdefiniowany w specyfikacji języka Java :
Członkowie typu array są następujące:
- pole
public final
length
, które zawiera liczbę składników tablicy.length
może być dodatnia lub zerowa.
Ponieważ istnieje nieograniczona liczba typów tablic (dla każdej klasy istnieje odpowiedni typ tablicy, a wtedy istnieją tablice wielowymiarowe), nie mogą one być zaimplementowane w klasie plik; JVM musi to robić w locie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-10 03:31:59
Chociaż nie jest to bezpośrednia odpowiedź na pytanie, jest to dodatek do argumentu .length
vs .size()
. BadaĹ 'em coĹ" zwiÄ ... zanego z tym pytaniem wiÄ ™ c kiedy na to natknÄ ... Ĺ 'em siÄ ™ zauwaĺľyĺ' em, ĹĽe definicja(y) podana tutaj
Publiczna końcowa długość pola, która zawiera liczbę składników tablicy.
Nie jest "dokładnie" poprawne.
Długość pola zawiera liczbę wolne miejsca na umieść komponent, a nie liczbę komponentów obecnych w tablicy. Reprezentuje więc całkowitą dostępną pamięć przydzieloną do tej tablicy, a nie Ilość zapełnionej pamięci.
Przykład:
static class StuffClass {
int stuff;
StuffClass(int stuff) {
this.stuff = stuff;
}
}
public static void main(String[] args) {
int[] test = new int[5];
test[0] = 2;
test[1] = 33;
System.out.println("Length of int[]:\t" + test.length);
String[] test2 = new String[5];
test2[0] = "2";
test2[1] = "33";
System.out.println("Length of String[]:\t" + test2.length);
StuffClass[] test3 = new StuffClass[5];
test3[0] = new StuffClass(2);
test3[1] = new StuffClass(33);
System.out.println("Length of StuffClass[]:\t" + test3.length);
}
Wyjście:
Length of int[]: 5
Length of String[]: 5
Length of StuffClass[]: 5
Jednak właściwość .size()
ArrayList
daje liczbę elementów na liście:
ArrayList<Integer> intsList = new ArrayList<Integer>();
System.out.println("List size:\t" + intsList.size());
intsList.add(2);
System.out.println("List size:\t" + intsList.size());
intsList.add(33);
System.out.println("List size:\t" + intsList.size());
Wyjście:
List size: 0
List size: 1
List size: 2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-16 10:08:06
Jest to Publiczne pole końcowe, które zawiera liczbę składników tablicy (długość może być dodatnia lub zerowa)
Tablica ma zatem te same publiczne pola i metody, co następująca klasa:
class A implements Cloneable, java.io.Serializable {
public final int length = X;
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError(e.getMessage());
}
}
}
Więcej informacji na
10.7 Array Members
Http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 17:31:40
Aby odpowiedzieć tak jak jest, gdzie jest ta właściwość długości tablicy zdefiniowana? W specjalnym Object header
.
Easy to see via JOL
int [] ints = new int[23];
System.out.println(ClassLayout.parseInstance(ints).toPrintable());
Jedna z linii tego wyjścia będzie brzmiała:
OFFSET SIZE TYPE DESCRIPTION
16 4 (object header) 17 00 00 00 (00010111 00000000 00000000 00000000) (23)
Zazwyczaj obiekty mają dwa nagłówki (mark i klass), tablice mają jeszcze jeden, który zawsze zajmuje 4 bytes
w długości, ponieważ size
jest int
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-24 10:02:23
Długość słowa kluczowego działa jak zdefiniowany plik danych. Używając tablicy, możemy jej użyć do uzyskania dostępu do ilości elementów w tablicy. Jeśli chodzi o String [], możemy wywołać metodę length () zdefiniowaną w klasie String. W odniesieniu do ArrayList możemy użyć metody size () zdefiniowanej w ArrayList. Zauważ, że podczas tworzenia listy tablic z ArrayList(capacity), początkowa wartość size () tej listy tablic wynosi zero, ponieważ nie ma żadnego elementu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-19 06:08:18