2013-11-08 3 views
4
public static void main(String[] args) 
{ 
    char [] d = {'a','b','c','d'}; 
    char [] e = {'d','c','b','a'}; 
    Arrays.sort(d); 
    Arrays.sort(e); 
    System.out.println(e);   //console : abcd 
    System.out.println(d);   //console : abcd 
    System.out.println(d.equals(e)); //console : false 
} 

Почему массивы неравны? Я, наверное, что-то пропустил, но это сводит меня с ума. Разве это не результат, который должен быть правдой? И да, я импортировал java.util.Arrays.Почему эти два массива не равны?

+0

http://stackoverflow.com/questions/8777257/equals-vs-arrays-equals-in-java – user902383

ответ

15

Не является ли результатом, который должен быть правдой?

№ Вы звоните equals по двум различным ссылкам на массивы. Массивы не переопределяют equals, поэтому вы получаете ссылочное равенство. Ссылки не равны, поэтому он возвращает false ...

Для сравнения значений в массивах используйте Arrays.equals(char[], char[]).

System.out.println(Arrays.equals(d, e)); 
+0

Я путаю его с равным методом String, я чувствую себя настолько немым. Большое спасибо! – Nik

+3

Это всегда казалось бесполезным (ява) для меня; если люди хотят, чтобы '==' они могли использовать '==', я понимаю это как значение по умолчанию, но я не понимаю, почему он не был переопределен в этом случае (или вообще не был доступен, поскольку массивы являются специальными) –

11

Массивы сделать не переопределение Object#equals(). Использование:

Arrays.equals(d, e); 

вместо этого, чтобы выполнить сравнение на основе стоимости.

Однако:

Arrays.equals делает не работы, как ожидается, для многомерных массивов. Он будет сравнивать ссылки первого уровня массивов вместо сравнения всех уровней. Обратитесь к this comment или используйте Arrays.deepEquals таким же образом.

+0

@Quincunx Если вы кодируете URL-адрес с помощью '% 29' и'% 28' для круглых скобок, он должен обрабатывать правильно. Спасибо, что упомянули об этом! – hexafraction

+0

Спасибо за подсказку (я удалил свой комментарий, потому что вы включили его в свой пост, подумали, что нашли его в другом месте) – Justin

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