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()
, он отлично работает, почему это так...
Ответы
Ответ 1
arraylist
- это ArrayList элементов String, поэтому вы не можете добавить к нему экземпляр массива. arraylist1
является arraylist
элементов Object
, поэтому вы можете добавить к нему массив, так как массив является Object
.
Если вы хотите добавить отдельные элементы массивов в List
s, то оба вызова add
должны быть изменены на addAll
:
arrayList.addAll(Arrays.asList(name));
arraylist1.addAll(Arrays.asList(name1));
Ответ 2
arraylist.add(name);// error here
Ошибка, потому что name
- это массив. Не String
. Вы пытаетесь добавить объект Array в ArrayList, который принимает только строки.
arraylist1.add(name1);// not error
Нет ошибки, потому что name1
является массивом Object
. В Java каждый класс представляет собой Object, даже массив объектов также Object. Следовательно, он принял это как объект. Хотя ваше имя1 является массивом объектов, в целом это сам объект.
Ответ 3
Кажется, вы думаете, что когда вы делаете
String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here
Предполагается добавить все элементы массива в список. Это неправда. Метод add
просто добавляет один параметр, который он присваивает списку.
В первом случае этот один элемент представляет собой массив строк. Массив строк не является самой строкой, поэтому это не удается.
Во втором случае этот один элемент представляет собой массив объектов. Массив объектов сам по себе является объектом, и поэтому он добавляется в список. Но обратите внимание, что массив добавлен, а не объекты внутри него.
Ответ 4
В первом примере выдается ошибка, потому что вы объявляете ArrayList
из Strings
, но позже пытаетесь добавить Array
из Strings
(не a String
, а collection
of Strings
), чтобы он.
Второй пример работает, потому что вы объявляете и ArrayList
из Objects
, а затем добавляете к нему Objects
(понимаете, что все в Java является Object
: a String
является Object
, a Array
также и, например, a Boolean
также является Object
, вы можете попробовать добавить True
во второй пример, и вы увидите, что он также будет работать).
Ответ 5
Здесь я вижу некоторое недоразумение String
и String[]
, оба не одинаковые, видя следующий код
String[] name={"Quan","Doan","Thi","Ha"};
arraylist.add(name);// error here
Кажется, вы пытаетесь добавить объект String[]
в ArrayList
типа String
. Если вы хотите добавить массив name
в список, тогда ваш тип списка должен быть String[]
. Таким образом, тип becasue отличается, поэтому вы не можете добавить объект String[]
в список типа String
. Но когда у вас есть список типов Object
, то, конечно, вы можете добавить в него любой объект.
Ответ 6
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);
В строке 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);
Когда шаг отладки к строке 10, name1
имеет тип данных java.lang.Object
, arraylist1
имеет тип данных ArrayList<Object>
. Поэтому добавьте элемент name1
в arraylist1
.