Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

public class Test { public Test() {

}

public static void main(String[] args) { Test t = new Test(); String s1 = "Hello world !!!"; String s2 = "Hello world !!!";

System.out.printlnf'String's equally = " + (s1 .equals(s2))); System.out.printlnf'Strings are the same = " + (s1 ==s2));

}

}

В результате на консоль будет выведено:

String's equally = true Strings are the same = true

Теперь несколько модифицируем код:

public class Test { public Test() {

}

public static void main(String[] args) { Testt = newTest(); String s1 = "Hello world !!!"; String s2 = new Stringf'Hello world !!!"); System.out.printlnf'String's equally = " + (s1 .equals(s2))); System.out.printlnf'Strings are the same = " + (s1==s2));

}

В результате на консоль будет выведено:

String's equally = true Strings are the same = false

Почему результат изменился? Дело в том, что создание нового объек­та - это одна из самых трудоемких процедур в Java. Поэтому компилятор стремится уменьшить их количество, если это не приводит к непредсказу­емому поведению программы.

В примере объявляются две переменных, которые инициализируются одинаковым значением. Поскольку класс String неизменяемый, их значения всегда будут одинаковыми. Это позволяет компилятору завести скрытую вспомогательную текстовую переменную, которая будет хранить такое зна­чение, а все остальные переменные будут ссылаться на него же, а не порож­дать новые объекты. В результате в первом варианте программы создается лишь один объект String. Для большинства операций это несущественная разница. Исключение составляют действия, которые привязаны к конкрет­ному объекту, а не к его значению. Это метод equals, методы wait/notify.

Во втором варианте указано динамическое обращение к конструкто­ру. В этом случае компилятор уже не имеет возможности заниматься опти­мизацией и JVM во время исполнения программы действительно создаст второй объект с точно таким же значением. Что мы и видим по результату выполнения примера.

В Java для строк определен оператор +. При использовании этого оператора производится конкатенация строк. В классе String также опре­делен метод:

public String concat(String s);

Он возвращает новый объект-строку, дополненный справа строкой s. Рассмотрим другой пример.