Отличие между == и .equals() в Java.
В Java существует два основных метода сравнения объектов: == и .equals(). Они имеют разные цели и поведение, и важно понимать, когда использовать каждый из них. Также вопрос о различии этих двух методов практически всегда присутствует на собеседовании уровня junior или trainee.
1) == (сравнение ссылок):
Оператор == сравнивает значения двух ссылок на объекты.
Возвращает true, если ссылки указывают на один и тот же объект в памяти, и false в противном случае.
Эффективен для примитивных типов данных. Пример на Картинке 1.
2) .equals() (сравнение содержимого):
Метод .equals() сравнивает содержимое объектов, а не их ссылки. И обычно переопределен в классах, чтобы определить равенство по логике приложения.
Часто используется для сравнения строк (пример на Картинке 1).
Переопределение метода .equals() также на Картинке 2.
Objects.equals():
Метод Objects.equals(a, b) может использоваться для сравнения двух объектов, учитывая возможность null.
Внутренне использует .equals(). Пример на Картинке 2.
Выбор между == и .equals() зависит от контекста и целей сравнения. Важно помнить о переопределении .equals() для пользовательских классов.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
В Java существует два основных метода сравнения объектов: == и .equals(). Они имеют разные цели и поведение, и важно понимать, когда использовать каждый из них. Также вопрос о различии этих двух методов практически всегда присутствует на собеседовании уровня junior или trainee.
1) == (сравнение ссылок):
Оператор == сравнивает значения двух ссылок на объекты.
Возвращает true, если ссылки указывают на один и тот же объект в памяти, и false в противном случае.
Эффективен для примитивных типов данных. Пример на Картинке 1.
2) .equals() (сравнение содержимого):
Метод .equals() сравнивает содержимое объектов, а не их ссылки. И обычно переопределен в классах, чтобы определить равенство по логике приложения.
Часто используется для сравнения строк (пример на Картинке 1).
Переопределение метода .equals() также на Картинке 2.
Objects.equals():
Метод Objects.equals(a, b) может использоваться для сравнения двух объектов, учитывая возможность null.
Внутренне использует .equals(). Пример на Картинке 2.
Выбор между == и .equals() зависит от контекста и целей сравнения. Важно помнить о переопределении .equals() для пользовательских классов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9✍2🔥2❤1
Может ли объект получить доступ к члену класса, объявленному как private? Если да, то каким образом?
☕️ Внутри класса доступ к приватной переменной открыт без ограничений;
☕️ Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
☕️ Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
☕️ Через механизм рефлексии (Reflection API) (см. Картинку). Не рекомендуется использовать в проектах.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
☕️ Внутри класса доступ к приватной переменной открыт без ограничений;
☕️ Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
☕️ Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
☕️ Через механизм рефлексии (Reflection API) (см. Картинку). Не рекомендуется использовать в проектах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4✍2👨💻2❤1🔥1🤓1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12👨💻2👍1
Какие из следующих слов являются ключевыми словами в Java?
Anonymous Quiz
8%
key, value, object
2%
function, loop, var
0%
execute, run, process
88%
return, static, final
2%
Посмотреть ответ
✍3👍2🎉2👨💻1
Вопрос из собеседования - Как и когда происходит увеличение количества корзин в HashMap?
Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75.
По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Помимо capacity у HashMap есть еще поле loadFactor, на основании которого, вычисляется предельное количество занятых корзин capacity * loadFactor. По умолчанию loadFactor = 0.75.
По достижению предельного значения, число корзин увеличивается в 2 раза и для всех хранимых элементов вычисляется новое «местоположение» с учетом нового числа корзин.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4✍3👨💻2
Класс Object в Java.
Вопрос про класс Object и его методы очень часто встречается на собеседованиях. Это - база.
В Java есть специальный суперкласс Object, который является родителем для всех остальных классов, другими словами - все классы в Java наследуются от класса Object.
Поэтому ссылочная переменная класса Object может ссылаться на объект любого другого класса. Поэтому объекты всех классов могут реализовать те методы, которые определены в классе Object.
А методы класса Object следующие:
– Class<?> getClass() – получает класс объекта во время выполнения;
– int hashCode() – возвращает хэш-код, связанный с вызывающим объектом;
– boolean equals(Object obj) – определяет, равен ли один объект другому;
– String toString() – возвращает строку, описывающую объект;
– Object clone() – создаёт новый объект, не отличающийся от клонируемого;
– void finalize() – вызывается перед удалением неиспользуемого объекта;
– void notify() – возобновляет выполнение потока, который ожидает вызывающего объекта;
– void notifyAll() – возобновляет выполнение всех потоков, которые ожидают вызывающего объекта;
– void wait() – ожидает другого потока выполнения.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Вопрос про класс Object и его методы очень часто встречается на собеседованиях. Это - база.
В Java есть специальный суперкласс Object, который является родителем для всех остальных классов, другими словами - все классы в Java наследуются от класса Object.
Поэтому ссылочная переменная класса Object может ссылаться на объект любого другого класса. Поэтому объекты всех классов могут реализовать те методы, которые определены в классе Object.
А методы класса Object следующие:
– Class<?> getClass() – получает класс объекта во время выполнения;
– int hashCode() – возвращает хэш-код, связанный с вызывающим объектом;
– boolean equals(Object obj) – определяет, равен ли один объект другому;
– String toString() – возвращает строку, описывающую объект;
– Object clone() – создаёт новый объект, не отличающийся от клонируемого;
– void finalize() – вызывается перед удалением неиспользуемого объекта;
– void notify() – возобновляет выполнение потока, который ожидает вызывающего объекта;
– void notifyAll() – возобновляет выполнение всех потоков, которые ожидают вызывающего объекта;
– void wait() – ожидает другого потока выполнения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4✍2👨💻2🔥1
Сегодня давайте поговорим о методе getClass() в Java.
getClass() - это метод, предоставляемый всеми объектами в Java, который возвращает объект типа Class. Но что это такое?
📘 Class - это специальный объект, который представляет собой метаинформацию о типе класса. С помощью getClass() мы можем получить доступ к этой метаинформации и узнать различные вещи о классе.
Например, мы можем узнать имя класса:
public class MyClass {
public static void main(String[] args) {
MyClass obj = new MyClass();
Class<?> clazz = obj.getClass();
System.out.println("Имя класса: " + clazz.getName());
}
}
Этот код выведет: Имя класса: com.example.MyClass.
💡 Почему это важно?
Метод getClass() может быть полезен, например, при рефлексии, когда нужно работать с классами во время выполнения программы. Метод очень полезен при отладке программы, чтобы найти возможную причину того или иного бага, особенно при разработке с использованием фреймворка Spring Boot.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
getClass() - это метод, предоставляемый всеми объектами в Java, который возвращает объект типа Class. Но что это такое?
📘 Class - это специальный объект, который представляет собой метаинформацию о типе класса. С помощью getClass() мы можем получить доступ к этой метаинформации и узнать различные вещи о классе.
Например, мы можем узнать имя класса:
public class MyClass {
public static void main(String[] args) {
MyClass obj = new MyClass();
Class<?> clazz = obj.getClass();
System.out.println("Имя класса: " + clazz.getName());
}
}
Этот код выведет: Имя класса: com.example.MyClass.
💡 Почему это важно?
Метод getClass() может быть полезен, например, при рефлексии, когда нужно работать с классами во время выполнения программы. Метод очень полезен при отладке программы, чтобы найти возможную причину того или иного бага, особенно при разработке с использованием фреймворка Spring Boot.
Please open Telegram to view this post
VIEW IN TELEGRAM
✍2👍2👨💻2❤1🔥1
Что такое анонимный класс в Java?
Anonymous Quiz
18%
Это класс, который не может содержать методов
8%
Это класс, который явно (не анонимно) наследуется от другого класса
61%
Это класс, который не имеет имени
5%
Это класс, который не может быть использован в коде
8%
Посмотреть ответ
👍5✍2👨💻2❤1🔥1
Метод hashCode() в Java.
Сегодня мы поговорим о методе hashCode() в Java. Это как ключик, который открывает нам доступ к таинственному миру хранения объектов в коллекциях.
🔑 Что такое hashCode()?
hashCode() - это метод, который возвращает целочисленное значение (хэш-код) объекта. Этот код используется, например, при работе с коллекциями, чтобы быстро находить объекты.
🤔 Зачем он нужен?
Повышение производительности: Когда вы хотите найти объект в коллекции, быстрый доступ по хэш-коду ускоряет процесс.
Работа с коллекциями: HashSet, HashMap и другие коллекции используют hashCode() для эффективного хранения объектов.
Выведем представление ниже определенного объекта:
Person tom = new Person("Tom");
System.out.println(tom.hashCode()); // 2036368507
Метод .hashCode(), определенный классом Object, возвращает разные целые числа для разных объектов.
💡 Совет:
Библиотека Lombok в деле: если используете Lombok, аннотация @EqualsAndHashCode автоматически создаст hashCode().
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Сегодня мы поговорим о методе hashCode() в Java. Это как ключик, который открывает нам доступ к таинственному миру хранения объектов в коллекциях.
🔑 Что такое hashCode()?
hashCode() - это метод, который возвращает целочисленное значение (хэш-код) объекта. Этот код используется, например, при работе с коллекциями, чтобы быстро находить объекты.
🤔 Зачем он нужен?
Повышение производительности: Когда вы хотите найти объект в коллекции, быстрый доступ по хэш-коду ускоряет процесс.
Работа с коллекциями: HashSet, HashMap и другие коллекции используют hashCode() для эффективного хранения объектов.
Выведем представление ниже определенного объекта:
Person tom = new Person("Tom");
System.out.println(tom.hashCode()); // 2036368507
Метод .hashCode(), определенный классом Object, возвращает разные целые числа для разных объектов.
💡 Совет:
Библиотека Lombok в деле: если используете Lombok, аннотация @EqualsAndHashCode автоматически создаст hashCode().
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4✍3👨💻2
Метод .equals() в Java.
Сегодня мы поговорим о методе equals() в Java, как о ключевой команде для сравнения объектов.
💡 Зачем нужен equals()?
equals() - метод, который используется для сравнения содержимого объектов. Он позволяет ответить на вопрос: "Эти два объекта равны?"
🤔 Как его использовать:
1) Переопределение метода:
public class MyClass {
private String name;
private int age;
// ... конструктор, геттеры, сеттеры и другие методы
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // сравнение ссылок
if (obj == null || getClass() != obj.getClass()) return false; // проверка классов
MyClass myObject = (MyClass) obj;
return age == myObject.age && Objects.equals(name, myObject.name);
}
}
2) Сравнение с null:
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // ссылки идентичны
if (obj == null || getClass() != obj.getClass()) return false; // проверка классов
// ... остальной код
}
3) Использование Objects.equals():
return Objects.equals(name, myObject.name);
💡 Важное замечание:
- Переопределите hashCode(), если переопределяете equals(). Это очень важное правило, о котором спрашивают на каждом собеседовании на Java разработчика.
Библиотека Lombok в деле: если используете Lombok, аннотация @EqualsAndHashCode автоматически создаст equals().
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Сегодня мы поговорим о методе equals() в Java, как о ключевой команде для сравнения объектов.
💡 Зачем нужен equals()?
equals() - метод, который используется для сравнения содержимого объектов. Он позволяет ответить на вопрос: "Эти два объекта равны?"
🤔 Как его использовать:
1) Переопределение метода:
public class MyClass {
private String name;
private int age;
// ... конструктор, геттеры, сеттеры и другие методы
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // сравнение ссылок
if (obj == null || getClass() != obj.getClass()) return false; // проверка классов
MyClass myObject = (MyClass) obj;
return age == myObject.age && Objects.equals(name, myObject.name);
}
}
2) Сравнение с null:
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // ссылки идентичны
if (obj == null || getClass() != obj.getClass()) return false; // проверка классов
// ... остальной код
}
3) Использование Objects.equals():
return Objects.equals(name, myObject.name);
💡 Важное замечание:
- Переопределите hashCode(), если переопределяете equals(). Это очень важное правило, о котором спрашивают на каждом собеседовании на Java разработчика.
Библиотека Lombok в деле: если используете Lombok, аннотация @EqualsAndHashCode автоматически создаст equals().
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
✍3👍3👨💻3⚡1
Сегодня наш путь ведет нас к методу toString() в Java, своего рода магическому зеркалу для объектов.
🌐 Что такое toString()?
Это метод, который возвращает строковое представление объекта. Когда мы вызываем его для объекта, он возвращает строку, представляющую его состояние.
💡 Зачем это нужно:
1) Отладка.
Удобно использовать toString() для вывода содержимого объекта в целях отладки.
2) Читаемость кода.
Полезно переопределять toString(), чтобы объекты были легко читаемы в логах или консоли.
🚀 Как использовать:
1) Простой вариант на Картинке 1:
public class MyClass {
private String name;
private int age;
// ... конструктор, геттеры, сеттеры и другие методы
@Override
public String toString() {
return "MyClass{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2) Использование Objects.toString() на Картинке 2:
@Override
public String toString() {
return Objects.toString(name) + ", " + age;
}
3) Использование String.format() также на Картинке 2:
Override
public String toString() {
return String.format("Name: %s, Age: %d", name, age);
}
💡 Советы:
Библиотека Lombok в деле: если используете Lombok, аннотация @ToString автоматически создаст toString().
Переопределение toString() делает ваш код более читаемым и облегчает отладку.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
🌐 Что такое toString()?
Это метод, который возвращает строковое представление объекта. Когда мы вызываем его для объекта, он возвращает строку, представляющую его состояние.
💡 Зачем это нужно:
1) Отладка.
Удобно использовать toString() для вывода содержимого объекта в целях отладки.
2) Читаемость кода.
Полезно переопределять toString(), чтобы объекты были легко читаемы в логах или консоли.
🚀 Как использовать:
1) Простой вариант на Картинке 1:
public class MyClass {
private String name;
private int age;
// ... конструктор, геттеры, сеттеры и другие методы
@Override
public String toString() {
return "MyClass{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2) Использование Objects.toString() на Картинке 2:
@Override
public String toString() {
return Objects.toString(name) + ", " + age;
}
3) Использование String.format() также на Картинке 2:
Override
public String toString() {
return String.format("Name: %s, Age: %d", name, age);
}
💡 Советы:
Библиотека Lombok в деле: если используете Lombok, аннотация @ToString автоматически создаст toString().
Переопределение toString() делает ваш код более читаемым и облегчает отладку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3✍2👨💻2🔥1
Что такое "перегрузка методов" в Java?
Anonymous Quiz
1%
Возможность изменения значения переменной
1%
Возможность выполнения метода в обратном порядке
94%
Возможность создания метода с тем же именем, но с разными параметрами
3%
Возможность создания метода внутри метода
1%
Посмотреть ответ
👍3✍2🎉2👏1
Поговорим о методе clone() в Java, который открывает перед нами врата клонирования объектов.
🔍 Что такое clone()?
clone() - это метод, который используется для создания копии объекта. Он находится в интерфейсе Cloneable и создает поверхностную копию объекта.
🚀 Как использовать:
1) Имплементация интерфейса Cloneable (см. Картинку 1).
Объект, который мы хотим клонировать, должен реализовывать интерфейс Cloneable и переопределять метод clone().
2) Глубокое клонирование (см. Картинку 2).
В стандартной реализации clone() создается поверхностная копия объекта. Если вам нужно глубокое клонирование (с копированием вложенных объектов), вы должны переопределить clone() вручную.
3) Использование в коде (см. Картинку 2).
🛑 Осторожно:
Клонирование объектов может вызвать проблемы с производительностью и безопасностью. Иногда лучше использовать другие методы, такие как конструктор копирования или методы фабрики.
На практике в коммерческой разработке обычно используется клонирование с помощью метода конструктора, который создает новый объект.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
🔍 Что такое clone()?
clone() - это метод, который используется для создания копии объекта. Он находится в интерфейсе Cloneable и создает поверхностную копию объекта.
🚀 Как использовать:
1) Имплементация интерфейса Cloneable (см. Картинку 1).
Объект, который мы хотим клонировать, должен реализовывать интерфейс Cloneable и переопределять метод clone().
2) Глубокое клонирование (см. Картинку 2).
В стандартной реализации clone() создается поверхностная копия объекта. Если вам нужно глубокое клонирование (с копированием вложенных объектов), вы должны переопределить clone() вручную.
3) Использование в коде (см. Картинку 2).
🛑 Осторожно:
Клонирование объектов может вызвать проблемы с производительностью и безопасностью. Иногда лучше использовать другие методы, такие как конструктор копирования или методы фабрики.
На практике в коммерческой разработке обычно используется клонирование с помощью метода конструктора, который создает новый объект.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3✍2👨💻2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁6💯3👨💻2
Методы wait(), notify() и notifyAll() в Java.
🚦 Многопоточность в Java
Многопоточность - это способность программы обрабатывать несколько потоков выполнения параллельно. В Java у нас есть инструменты для управления потоками, и одними из них являются методы wait(), notify() и notifyAll().
На собеседовании желательно упомянуть эти, рассказывая о методах класса Object. Даже если вы не сильно разбираетесь в многопоточности, но знаете о таких методах, методах контроля потоков, - уже будет хорошо.
Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.
Иногда при взаимодействии потоков встает вопрос о извещении одних потоков о действиях других. Например, действия одного потока зависят от результата действий другого потока, и надо как-то известить один поток, что второй поток произвел некую работу.
– wait() освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify();
– notify() продолжает работу потока, у которого ранее был вызван метод wait();
– notifyAll() возобновляет работу всех потоков, у которых ранее был вызван метод wait().
Эти методы - мощный инструмент в арсенале Java-разработчика, и их правильное использование делает наши многопоточные приложения более надежными и эффективными.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
🚦 Многопоточность в Java
Многопоточность - это способность программы обрабатывать несколько потоков выполнения параллельно. В Java у нас есть инструменты для управления потоками, и одними из них являются методы wait(), notify() и notifyAll().
На собеседовании желательно упомянуть эти, рассказывая о методах класса Object. Даже если вы не сильно разбираетесь в многопоточности, но знаете о таких методах, методах контроля потоков, - уже будет хорошо.
Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.
Иногда при взаимодействии потоков встает вопрос о извещении одних потоков о действиях других. Например, действия одного потока зависят от результата действий другого потока, и надо как-то известить один поток, что второй поток произвел некую работу.
– wait() освобождает монитор и переводит вызывающий поток в состояние ожидания до тех пор, пока другой поток не вызовет метод notify();
– notify() продолжает работу потока, у которого ранее был вызван метод wait();
– notifyAll() возобновляет работу всех потоков, у которых ранее был вызван метод wait().
Эти методы - мощный инструмент в арсенале Java-разработчика, и их правильное использование делает наши многопоточные приложения более надежными и эффективными.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓4✍3👍2👨💻1