JavaRush /Курсы /Java Syntax /Сравниваем и ставим условия

Сравниваем и ставим условия

Java Syntax
4 уровень , 6 лекция
Открыта

Фрагмент лекции JavaRush - университета.


— Хочу рассказать тебе немного о сравнении переменных в Java.

— Самые простые операторы сравнения ты уже знаешь – это меньше (<) и больше (>).

— Ага.

— Так же есть «равно»(==) и «не равно»(!=). А еще «меньше либо равно»(<=) и «больше либо равно»(>=).

— О, это уже интереснее.

— Обрати внимание, что операторов «=<» и «=>» в Java нет!

— Знак «=» используется для операции присваивания, поэтому для равенства используют «==» — два знака равно. Для того, чтобы проверить, что переменные не равны, используют «!=»

— Ясно.

— При сравнении двух переменных в Java с использованием оператора «==», происходит сравнение того, что эти переменные в себе содержат.

— Т.е. для переменных примитивных типов происходит сравнение значений.

— Для переменных ссылочных типов происходит сравнение ссылок. Т.е. если объекты идентичны внутри, но ссылки на них разные, сравнение покажет, что они неравны: результатом сравнения будет false(ложь). Сравнение ссылок будет true(истина), только если обе ссылки указывают на один и тот же объект.

— Для сравнения объектов можно использовать специальный метод equals(). Этот метод (и все методы класса Object) добавляется компилятором в твой класс, даже если ты их не объявляешь. Поясню на примерах:

Код Пояснение
1
int a = 5;
int b = 5;
System.out.println(a == b);
Происходит сравнение примитивных типов.
На экран будет выведено true.
2
Cat cat1 = new Cat("Vaska");
Cat cat2 = cat1;
System.out.println(cat1 == cat2);
Происходит сравнение ссылок.
На экран будет выведено true.
Обе переменных хранят ссылки на один и тот же объект.
3
String s = new String("Mama");
String s2 = s;
System.out.println(s == s2);
Происходит сравнение ссылок.
На экран будет выведено true.
Обе переменных хранят ссылки на один и тот же объект.
4
Cat cat1 = new Cat("Vaska");
Cat cat2 = new Cat("Vaska");
System.out.println(cat1 == cat2);
Происходит сравнение ссылок.
На экран будет выведено false.
Переменные хранят ссылки на два идентичных объекта Cat, но не на один и тот же.
5
String s = new String("Mama");
String s2 = new String("Mama");
System.out.println(s == s2);
Происходит сравнение ссылок.
На экран будет выведено false.
Переменные хранят ссылки на два идентичных объекта String, но не на один и тот же.
6
Cat cat1 = new Cat("Vaska");
Cat cat2 = new Cat("Vaska");
System.out.println(cat1.equals(cat2));
Происходит сравнение объектов.
Если в классе Cat не переопределен метод equals(), на экран будет выведено false.
Переменные хранят ссылки на два идентичных объекта Cat, но не на один и тот же.
7
String s = new String("Mama");
String s2 = new String("Mama");
System.out.println(s.equals(s2));
Происходит сравнение объектов.
На экран будет выведено true.
Переменные хранят ссылки на два идентичных объекта String.

— И, кстати, едва не забыл! Вот тебе несколько заданий:

4
Задача
Java Syntax Pro, 4 уровень, 6 лекция
Недоступна
Четные числа
Четные числа
4
Задача
Java Syntax Pro, 4 уровень, 6 лекция
Недоступна
Сумма кратных чисел
Сумма кратных чисел
Комментарии (1164)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
777 777 Уровень 5
13 января 2025
тоесть есть два вида сравнения ,сравнения разных переменных по ссылке на обьект который они содержат, и сравнение обьектов по их содержанию. String g3 = "Message"; String u3 = "Message"; System.out.println(g3 == u3); //true - сдесь две разные переменные но они ссылаются на один и тот же обьект только потому что их содержание а именно слово "Message" одинаковое и java не создает два обьекта а создает только один обьект на который сссылаются g3 и u3.(== -это сравнение по ссылке на обьект, а метод equals - это сравнение содержания двух обьектов ) А вот 6 и 7 пример меня заставили задуматься. Тоесть двум разным переменным присваем каждому новый обьект который содержит одинаковуют строку "Vaska" но при сравнении через метод equals , содержимое этих двух обьектов разное? а когда создаем два обьекта типа String со словом внутри "Mama" то их содержимуе уже одинаковое
22 июня 2024
бомбит! ах Вы старые каракатицы высушенные на солнце!! ну какого морского дьявола вы делаете?! как минимум второй уровень(в задачах) мы вовсю используем операторы сравнения и сами уже прочитали инфу по ним и вы только сейчас даете эту инфу?? серьезно??? нахрена она здесь нужна?Это касается не только этого материала. считаю в корне неверным давать задачи на применение материала до его предоставления. (аргументы в стиле: вы сами должны это найти изучить - идут по известному маршруту!! ) либо вы это указываете в тексте задания: для решения вам требуется изучить самостоятельно то-то. либо зарение даете материал. )
4 марта 2024
04.03.2024 check, мой уровень 4
Николай Уровень 6
1 марта 2024
выведи надпись: «Подрасти еще». Уберите кавычки в условии, сбивают с толку.
hidden #2488401 Уровень 5
19 декабря 2023
Задача "Сортировка трех чисел". Если не углубляться в массивы и циклы, то можно и так найти среднее число. Остальные уже не проблема:

int averageNumber = a + b + c - (minNumber + maxNumber);
System.out.println(maxNumber + " " + averageNumber + " " + minNumber);
Увайс Уровень 41
20 июня 2023
По поводу задания "Настя или Настя?" почему не было объяснения как длину строк сравнивать? Двойное равенство (==) выдаст true если из одного объекта берется строка, а метод .equals сравнит на идентичность
Артур Тимофеев Уровень 9 Expert
9 февраля 2023
Я что то не так делаю, либо порядок теории не соответствует заданиям? Попадались задачи с решением при помощи цикла for, операторы сравнения уже были использованы 2 статьи назад...
Skoda47 Уровень 6
10 февраля 2023
я решил все по else if не без проблем конечно, но решение есть!
megaharosh Уровень 3
5 ноября 2022
лекция на операторы сравнения и метод equals и задачи, где это не применяется p.s обожаю javarush👍
LOCKES Уровень 4
20 января 2023
постоянные затравочки на будущее)))
Anonymous #1389663 Уровень 15
25 августа 2022
Подскажите, пожалуйста, почему такое решение засчитывается, если не выполняется условие "Если два числа равны между собой, необходимо вывести любое."? В сравнении же знак сравнения указывается строго без равно.

Scanner scanner = new Scanner(System.in);
        int n1 = scanner.nextInt();
        int n2 = scanner.nextInt();

        int min = n1 < n2 ? n1 : n2;
        System.out.println(min);
Yury Seid Уровень 8
28 октября 2022
"Вывести любое" - означает можно вывести как n1, так и n2. Без разницы. У тебя равны два числа. "n1 == n2". Значит, после "?" выполняется условие "false" и возвращается "n2" в переменную min. У тебя там либо "true" либо "false", а возвратить можно любое n1/n2. Понятно?
Perl Developer Уровень 1
6 августа 2022
Пункты 6 и 7 не понял.
Ilya Уровень 28
12 сентября 2022
Согласен. Кто соображает :), подскажите разницу между пунктами 6 и 7. Почему в одном случае истина, в другом ложь?
Кто-то да? Уровень 2 Expert
25 сентября 2022
Дальше должно это объясняться по идее, так как это переопределение методов. Так как тут происходит сравнение именно объекты класса Cat, а не String, то метод equals не умеет сравнивать объёкты этого класса. Этот метод нужно будет переопределять, чтобы он понимал а что сравнивать то нужно у этого класса.