В Java toString
на массиве печатается [
, затем символ, представляющий тип элемента массива (в этом случае C
), а затем хэш-код идентификатора. Итак, в вашем случае, вы уверены, что он возвращает исходную строку, а не что-то вроде [[email protected]
?
В любом случае, вы должны использовать new String(arr)
. Это самый короткий, самый простой способ конвертации char[]
обратно в String
. Вы можете также использовать Arrays.toString(arr)
связанных с пустяков
Причина, по которой ваш метод arr.toString()
возвращает что-то вроде [Cf4e6d
что Object.toString
возвращается
getClass().getName() + '@' + Integer.toHexString(hashCode())
Для char
массива, getName()
возвращает строку [C
. Для вашей программы вы можете увидеть это с кодом:
System.out.println(arr.getClass().getName());
Вторая часть результата, Object.hashCode()
, возвращает номер на основании адреса памяти объекта, а не содержимое массива. Это связано с тем, что по умолчанию определение «равно» для объекта является ссылочным равенством, т. Е. Два объекта одинаковы, только если они являются одним и тем же ссылочным объектом в памяти. Таким образом, вы получите различные arr.toString()
значения для двух массивов на основе одной и той же строки:
String s = "fdsa";
char[] arr = s.toCharArray();
char[] arr2 = s.toCharArray();
System.out.println(arr.toString());
System.out.println(arr2.toString());
дает:
[[email protected]
[[email protected]
Обратите внимание, что это отличается для String
класса, где правила равенства переопределяется, чтобы сделать его имеют значение равенства. Тем не менее, вы всегда должны использовать string1.equals(string2)
для проверки равенства строк, а не ==
, поскольку метод ==
все равно будет проверять местоположение памяти.
Во втором фрагменте вы вызываете метод 'toString' в массиве, выделенном из класса Object. –
Разве это не наоборот? т. е. 'new String (arr)' возвращает отсортированную строку? – user184994
Вот что говорит OP: new String содержит отсортированное значение. – jordan