2015-07-29 4 views
14

Я искал это, но не смог найти то, что мне нужно, поэтому я создал новое сообщение. Я надеюсь понять эту проблему. Благодарю.ArrayList и 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 

Может кто-нибудь объяснить, что, когда я прохожу name в add() метод, то я получаю ошибку, но когда я прохожу name1 в add() метод, он отлично работает, почему это так ...

+7

потому что 'Object []' является 'Object' – njzk2

ответ

21

arraylist является ArrayList элементов String, поэтому вы не можете добавить к нему экземпляр массива. arraylist1 - это ArrayList из Object элементов, поэтому вы можете добавить к нему массив, так как массив равен Object.

Если вы хотите добавить отдельные элементы массивов в List с, оба add вызовы должны быть изменены на addAll:

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

Ошибка, потому что name является массивом. Не String. Вы пытаетесь добавить объект Array в ArrayList, который принимает только строки.

arraylist1.add(name1);// not error 

Нет ошибок, потому что name1 является Object массив. В Java каждый класс представляет собой объект, даже массив объектов, также Объект. Следовательно, он принял это как объект. Хотя ваш name1 - это массив объектов, в целом это сам объект.

+0

Я бы не сказал, что все в java является объектом ... –

+0

Не каждый экземпляр экземпляра в Java получается из' Object'? Существуют ли какие-либо оговорки, в которых нельзя добавить ссылочное значение в 'arraylist1'? –

+0

@ShaunWilson Primitives не происходит из 'Object'. Вы все равно можете добавить их в 'arrayList1', потому что они будут автообносятся, но они больше не будут примитивами. Кроме того, термин «все» слишком велик. Оператор не является объектом в java, в то время как он может быть на других языках, что вызывает путаницу. –

6

Вы, кажется, думаете, что, когда вы делаете

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

Предполагается добавить все элементы массива в списке. Это не правда. Метод add просто добавляет один параметр, который он присваивает списку.

В первом случае этот один элемент представляет собой массив строк. Массив строк не является самой строкой, поэтому это не удается.

Во втором случае этот один элемент представляет собой массив объектов. Массив объектов сам по себе является объектом, и поэтому он добавляется в список. Но учтите, что добавлен массив , а не объекты внутри него.

5

первый пример выдает ошибку, потому что вы объявляете ArrayList из Strings но потом попытаться добавить Array из Strings (не String, а collection из Strings) к нему.

второй пример работает, потому что вы заявляете и ArrayList из Objects, а затем добавить Objects к нему (понять, что все в Java является Object: а String является Object, в Array также и, например, Boolean является Object также, вы можете попробовать добавить True во втором примере, и вы увидите, что он также будет работать).

2

Здесь я вижу некоторое непонимание String и String[] оба они не одинаковы, в то время как видя ваш следующий код

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

кажется, что вы пытаетесь добавить String[] объект в ArrayList типа String. Если вы хотите добавить массив name в список, тогда ваш тип списка должен быть String[]. Так что тип becasue отличается, поэтому вы не можете добавить объект String[] в список типа String. Но когда у вас есть список типов Object, то, конечно, вы можете добавить в него любой объект.

1

IDE четко указывает нам тип данных объекта.

Первый фрагмент кода

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 В строке 6, объект с именем arraylist имеет тип ArrayList<java.lang.String> но вы пытаетесь что-то вроде этого: ArrayList<java.lang.String[]> вызвать ошибку несовместимости типов данных.

Второй фрагмент кода

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 Когда шаг отладки в линию 10, name1 это имеет тип java.lang.Object данных, arraylist1 имеет тип данных ArrayList<Object>. Поэтому добавьте элемент name1 в arraylist1 успех.

Смежные вопросы