2015-07-29 22 views
14

Przeszukałem to, ale nie mogłem znaleźć tego, czego potrzebuję, więc utworzyłem nowy post. Mam nadzieję, że zrozumiem ten problem. Dzięki.ArrayList and String [] AND Object []

ArrayList<String> arraylist= new ArrayList<String>(); 
arraylist.add("Nguyen"); 
arraylist.add("Viet"); 

String[] name={"Quan","Doan","Thi","Ha"}; 
arraylist.add(name);// error here 

ArrayList<Object> arraylist1=new ArrayList<Object>(); 
arraylist1.add("Nguyen"); 
arraylist1.add("Viet"); 
Object[] name1={"Quan","Doan","Thi","Ha"}; 
arraylist1.add(name1);// not error 

Może ktoś wyjaśnić, że kiedy przechodzą name w add() metody następnie pojawia się błąd, ale kiedy przechodzą name1 do add() metody, to działa dobrze, to dlaczego jest tak ...

+7

ponieważ 'Object []' jest 'Obiektem' – njzk2

Odpowiedz

21

arraylist jest element ArrayList elementów String, więc nie można do niego dodać instancji tablicy. arraylist1 to elementy ArrayList z Object, więc możesz dodać do niego tablicę, ponieważ tablica to Object.

Jeśli chcesz dodać poszczególne elementy tablic do List s obie add Połączenia powinny być zmienione na addAll:

arrayList.addAll(Arrays.asList(name)); 
arraylist1.addAll(Arrays.asList(name1)); 
8
arraylist.add(name);// error here 

Błąd ponieważ name jest tablicą. Nie jest to String. Próbujesz dodać obiekt Array do tablicy ArrayList, która akceptuje tylko ciągi.

arraylist1.add(name1);// not error 

Brak błędu ponieważ name1 jest Object tablicą. W Javie każda klasa to Obiekt, nawet tablica Obiektów także Obiekt. Dlatego też zaakceptował to jako Obiekt. Chociaż twoja name1 jest tablicą obiektów, jako całość jest najpierw Obiektem.

+0

Nie powiedziałbym, że wszystko w java jest obiektem ... –

+0

Czy każda instancja typu w Javie nie pochodzi od 'Object'? Czy są jakieś zastrzeżenia, w których NIE można dodać wartości odniesienia do 'arraylist1'? –

+0

@ShaunWilson Primitives nie wywodzi się z 'Object'. Nadal można dodać je do 'arrayList1', ponieważ byłyby one autoboxed, ale nie byłyby one już prymitywne. Również termin "wszystko" jest zbyt duży. Operator nie jest obiektem w języku Java, podczas gdy może być w innych językach, co powoduje zamieszanie. –

6

Wydaje się, że myśli, że kiedy robisz

String[] name={"Quan","Doan","Thi","Ha"}; 
arraylist.add(name);// error here 

Przypuszcza się, aby dodać wszystkie elementy tablicy do listy. To nieprawda. Metoda add dodaje tylko jeden parametr do listy.

W pierwszym przypadku ten jeden element jest tablicą ciągów. Tablica łańcuchów nie jest ciągiem, więc to się nie udaje.

W drugim przypadku ten jeden element jest tablicą obiektów. Tablica obiektów jest sama w sobie obiektem i dlatego jest dodawana do listy. Należy jednak zauważyć, że dodano macierz , a nie znajdujące się w niej obiekty.

5

1-ta przykład zgłasza błąd, bo deklarujesz ArrayList z Strings ale później próby dodania Array z Strings (nie String, ale collection z Strings) do niego.

2-ty przykład działa bo zadeklarować i ArrayList z Objects a później dodać Objects do niego (zrozumieć, że wszystko w Javie jest Object: a String jest Object, takie Array także i na przykład Boolean jest Object również, możesz spróbować dodać True w drugim przykładzie, a zobaczysz, że to też zadziała).

2

Tutaj widzę pewne niezrozumienie String i String[] oba nie są takie same, a widząc następujący kod

String[] name={"Quan","Doan","Thi","Ha"}; 
arraylist.add(name);// error here 

wydaje się, że próbujesz dodać String[] obiektu do ArrayList typu String. Jeśli chcesz dodać tablicę name do listy, Twój typ listy musi być String[]. Tak więc typ becasa jest inny, więc nie można dodać obiektu String[] do listy typu String. Ale kiedy masz listę typu Object, możesz oczywiście dodać do niej dowolny obiekt.

1

IDE mówi nam wyraźnie o typie danych obiektowych.

Pierwszy fragment kodu

In this error code snippet: 
ArrayList<String> arraylist= new ArrayList<String>(); 
arraylist.add("Nguyen"); 
arraylist.add("Viet"); 
String[] name={"Quan","Doan","Thi","Ha"}; 
arraylist.add(name); 

enter image description here Na linii 6, obiekt o nazwie arraylist ma typ ArrayList<java.lang.String> ale spróbuj coś takiego: ArrayList<java.lang.String[]> spowodować błąd niezgodność typu danych.

kod Drugi fragment

ArrayList<Object> arraylist1=new ArrayList<Object>(); 
arraylist1.add("Nguyen"); 
arraylist1.add("Viet"); 
Object[] name1={"Quan","Doan","Thi","Ha"}; 
arraylist1.add(name1); 

enter image description here Podczas debugowania krok do linii 10, name1 to ma typ danych java.lang.Object, arraylist1 ma typ danych ArrayList<Object>. Dlatego dodaj element name1 do arraylist1 powodzenie.

Powiązane problemy