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.