int [] source = {-2, -1,0,1,2,3,4,5,6};

После выполнения команды

int [] dest = Arrays.copyOfRange (source,2,5);

в новый массив будут скопированы значения {0,1,2}. Обратите внимание, что копируются элементы с индексом до второго значения, но не включая его. Поэтому элемент с индексом 5 не будет скопирован.

toString () – преобразование содержимого массива в строку. Это простой способ вывести содержимое массива на печать, например:

int [] arr = {3,8,10,1,6};

System.out.println(Arrays.toString (arr));

На печать будет выведена строка [3, 8, 10, 1, 6].

sort () – сортировка элементов массива по возрастанию. Метод sort () не возвращает новый массив. Он просто модифицирует имеющийся. Допустим, мы объявили массив и выполнили сортировку:

int [] arr = {10,3, -1,6,0};

Arrays.sort (arr);

System.out.println(Arrays.toString (arr));

На печать будет выведена строка [-1, 0, 3, 6, 10].

binarySearch () – поиск индекса заданного значения в отсортированном массиве. Если вы не уверены, что значения элементов массива расположены по возрастанию, то перед использованием метода binarySearch () необходимо отсортировать массив при помощи метода sort (). Допустим, у нас есть отсортированный массив:

int [] arr = {2,7,15,42,56,78};

int myIndex = Arrays.binarySearch (arr, 56);

Переменной myIndex будет присвоено значение 4. Это индекс элемента массива, имеющего значение 56.

Что случится, если в качестве аргумента указать значение, которого нет в массиве? Мы получим странный результат, который требует отдельных пояснений. Например, попробуем найти индекс для значения 18:

int myIndex = Arrays.binarySearch (arr, 18);

Переменной myIndex будет присвоено значение -4. Минус означает, что такое значение не найдено. Число 3 означает, какой у этого значения был бы индекс, если бы оно было в массиве. Но к этому индексу зачем-то прибавлена единица! Иными словами, если бы в массиве arr имелось значение 18, то у него был бы индекс 4—1=3.

Как мы уже упоминали в предыдущем разделе, длина массива (количество элементов) определяется через свойство length, поэтому метод для определения длины массива не применяется.

5.4 Строки

Строго говоря, строка в языке Java – это не тип данных, а экземпляр встроенного класса String. У класса String есть собственные методы для работы со строками. Класс String, в отличие от класса Arrays, не требует импорта.

Мы не случайно говорим о строках и массивах в одной главе. Строку текста можно рассматривать, как упорядоченный набор символьных значений, где каждый символ имеет собственный порядковый номер (индекс). Переменная, которая ассоциирована со строкой, хранит ссылку на область памяти. В этом строки похожи на массивы.

Строку можно создать разными способами. Наиболее очевидный – создать экземпляр класса String в явном виде:

String str = «Hello, World!»;

Можно создать пустой объект класса String:

String str = new String ();

Можно создать строку из массива символов:

char [] chars = {«J», ’a’, ’v’, ’a’};

String str = new String (chars);

Строки могут являться элементами массива:

String [] userNames = {«Василий», «Петр», «Николай»};

Строки можно объединять при помощи оператора +. Эта операция называется конкатенацией строк:

String str1 = «Java»;

String str2 = «Language»;

String str3 = str1 + str2;

Допускается сокращенная форма оператора присваивания +=:

String str3 += «Language»;

Строка является неизменяемым объектом. Если в результате манипуляций со строкой меняется ее текст, то на самом деле в памяти создается новая строка, и строковой переменной присваивается новая ссылка. Если старая строка больше нигде не используется, то автоматический сборщик мусора удаляет ее, освобождая память.