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

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

Открыта

Фрагмент лекции 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 Beta,  4 уровень6 лекция
Недоступна
Четные числа
Четные числа
4
Задача
Java Syntax Pro Beta,  4 уровень6 лекция
Недоступна
Сумма кратных чисел
Сумма кратных чисел
Комментарии (1164)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
777 777
Уровень 5
13 января 2025, 08:03
тоесть есть два вида сравнения ,сравнения разных переменных по ссылке на обьект который они содержат, и сравнение обьектов по их содержанию. 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, 13:05
бомбит! ах Вы старые каракатицы высушенные на солнце!! ну какого морского дьявола вы делаете?! как минимум второй уровень(в задачах) мы вовсю используем операторы сравнения и сами уже прочитали инфу по ним и вы только сейчас даете эту инфу?? серьезно??? нахрена она здесь нужна?Это касается не только этого материала. считаю в корне неверным давать задачи на применение материала до его предоставления. (аргументы в стиле: вы сами должны это найти изучить - идут по известному маршруту!! ) либо вы это указываете в тексте задания: для решения вам требуется изучить самостоятельно то-то. либо зарение даете материал. )
4 марта 2024, 13:41
04.03.2024 check, мой уровень 4
Николай
Уровень 6
1 марта 2024, 15:09
выведи надпись: «Подрасти еще». Уберите кавычки в условии, сбивают с толку.
hidden #2488401
Уровень 5
19 декабря 2023, 11:13
Задача "Сортировка трех чисел". Если не углубляться в массивы и циклы, то можно и так найти среднее число. Остальные уже не проблема:
int averageNumber = a + b + c - (minNumber + maxNumber);
System.out.println(maxNumber + " " + averageNumber + " " + minNumber);
Увайс Программист 1С
20 июня 2023, 16:26
По поводу задания "Настя или Настя?" почему не было объяснения как длину строк сравнивать? Двойное равенство (==) выдаст true если из одного объекта берется строка, а метод .equals сравнит на идентичность
Артур Тимофеев
Уровень 9
Expert
9 февраля 2023, 15:21
Я что то не так делаю, либо порядок теории не соответствует заданиям? Попадались задачи с решением при помощи цикла for, операторы сравнения уже были использованы 2 статьи назад...
Skoda47
Уровень 6
10 февраля 2023, 09:22
я решил все по else if не без проблем конечно, но решение есть!
megaharosh
Уровень 3
5 ноября 2022, 13:27
лекция на операторы сравнения и метод equals и задачи, где это не применяется p.s обожаю javarush👍
LOCKES
Уровень 4
20 января 2023, 02:53
постоянные затравочки на будущее)))
Anonymous #1389663
Уровень 15
25 августа 2022, 14:21
Подскажите, пожалуйста, почему такое решение засчитывается, если не выполняется условие "Если два числа равны между собой, необходимо вывести любое."? В сравнении же знак сравнения указывается строго без равно.
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, 19:39
"Вывести любое" - означает можно вывести как n1, так и n2. Без разницы. У тебя равны два числа. "n1 == n2". Значит, после "?" выполняется условие "false" и возвращается "n2" в переменную min. У тебя там либо "true" либо "false", а возвратить можно любое n1/n2. Понятно?
Perl Developer Perl Developer
6 августа 2022, 14:10
Пункты 6 и 7 не понял.
Ilya
Уровень 28
12 сентября 2022, 06:56
Согласен. Кто соображает :), подскажите разницу между пунктами 6 и 7. Почему в одном случае истина, в другом ложь?
Кто-то да?
Уровень 2
Expert
25 сентября 2022, 18:07
Дальше должно это объясняться по идее, так как это переопределение методов. Так как тут происходит сравнение именно объекты класса Cat, а не String, то метод equals не умеет сравнивать объёкты этого класса. Этот метод нужно будет переопределять, чтобы он понимал а что сравнивать то нужно у этого класса.