Каким будет результат сравнения в следующем коде?
Ответ:
s1 == s2 ? true
s1 == s3 ? false
s1 equals s3 ? true
Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
Ответ:
s1 == s2 ? true
s1 == s3 ? false
s1 equals s3 ? true
Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
👍37❤6
Расширьте свои навыки в программировании с бесплатным мини-курсом по Java! Научитесь создавать Telegram-ботов, разрабатывать программы для обработки данных и строить чаты на фреймворке Spring. Не упустите шанс изучить основы Java-разработки — начните обучение уже сегодня: 👉 https://epic.st/I-9KQ?erid=2VtzqxFc6Ar
Формат мини-курса отлично подойдёт для обучения из любой точки мира: смотрите видео в удобное время и закрепляйте навыки на практике.
🎁 За время обучения вы получите 5 полезных материалов в подарок, сертификат на скидку 10 000 рублей на любой курс, персональную карьерную консультацию и доступ к изучению английского языка в Skillbox на год.
До встречи на мини-курсе. Старт после регистрации!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Формат мини-курса отлично подойдёт для обучения из любой точки мира: смотрите видео в удобное время и закрепляйте навыки на практике.
🎁 За время обучения вы получите 5 полезных материалов в подарок, сертификат на скидку 10 000 рублей на любой курс, персональную карьерную консультацию и доступ к изучению английского языка в Skillbox на год.
До встречи на мини-курсе. Старт после регистрации!
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
❤6👍2🎅1
new vs valueOf
Старайтесь всегда использовать метод
Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.
Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной.
Старайтесь всегда использовать метод
valueOf
вместо конструктора в стандартных классах-оболочках примитивных типов, кроме тех случаев, когда вам нужно конкретно выделить память под новое значение. Сейчас объясню, почему.Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.
Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной.
👍27❤3🔥3
Forwarded from Яндекс
This media is not supported in your browser
VIEW IN TELEGRAM
«Порог входа не низкий, но он значительно ниже, чем 10–20 лет назад».
«Не страшно, если ваш язык программирования не самый популярный».
«Так начинается почти у всех. Только потом вы начнёте углубляться и разбираться».
Подписывайтесь
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7❤4👍3
От Java к Kotlin (2023) PDF
Книга описывает практические приемы рефакторинга и переноса кода написанных на Java мобильных приложений для Android на язык Kotlin с сохранением совместимости. Приведено подробное сравнение этих двух языков, даны примеры перевода проектов с Java на Kotlin, добавления поддержки Kotlin в сборку Java. Показан переход от классов Java к классам Kotlin, от коллекций Java к коллекциям Kotlin, от объектов JavaBeans к значениям, от статических методов к функциям верхнего уровня. Подробно рассматривается обработка ошибок, приведены практические приемы управления проектами со смешанной кодовой базой. Даны советы по рефакторингу кода и функциональному программированию на Kotlin.
Книга описывает практические приемы рефакторинга и переноса кода написанных на Java мобильных приложений для Android на язык Kotlin с сохранением совместимости. Приведено подробное сравнение этих двух языков, даны примеры перевода проектов с Java на Kotlin, добавления поддержки Kotlin в сборку Java. Показан переход от классов Java к классам Kotlin, от коллекций Java к коллекциям Kotlin, от объектов JavaBeans к значениям, от статических методов к функциям верхнего уровня. Подробно рассматривается обработка ошибок, приведены практические приемы управления проектами со смешанной кодовой базой. Даны советы по рефакторингу кода и функциональному программированию на Kotlin.
👍19❤6🔥2
🔥 Это база с 1700 вопросами с собеседований на Java разработчика. Фишка в том, что просчитана вероятность с которой вопрос буден задан и есть примеры ответов. Теперь можно легко получить оффер, подготовившись к самым популярным вопросам 😏
Telegram
Java | Вопросы собесов
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+icUwivvbGOkwNWRi
Задачи t.me/+8eqUTboisnkyZjQy
Вакансии t.me/+4pspF5nDjgM4MjQy
Реклама @easyoffer_adv
ВП @easyoffer_vp
Тесты t.me/+icUwivvbGOkwNWRi
Задачи t.me/+8eqUTboisnkyZjQy
Вакансии t.me/+4pspF5nDjgM4MjQy
😁9❤1☃1🎅1
Java-разработчики, этот пост для вас!
13 апреля, всего за один день, вы можете получить оффер и присоединиться к дружному коллективу AXENIX.
План действий такой:
— до 11 апреля отправьте нам свое резюме через этот сайт
— дождитесь звонка от нашего рекрутера, чтобы получить ответы на все вопросы
— 13 апреля пройдите онлайн-собеседование с экспертами AXENIX
— получите оффер в тот же день!
Вакансии по Java-разработке открыты для кандидатов из городов, где представлены офисы AXENIX (Москва, Тверь, Санкт-Петербург, Ростов-на-Дону, Воронеж, Краснодар), а также специалистов, готовых к переезду.
Подробнее здесь
До встречи!
Реклама. ООО "АКСТИМ". ИНН 7705476338.
13 апреля, всего за один день, вы можете получить оффер и присоединиться к дружному коллективу AXENIX.
План действий такой:
— до 11 апреля отправьте нам свое резюме через этот сайт
— дождитесь звонка от нашего рекрутера, чтобы получить ответы на все вопросы
— 13 апреля пройдите онлайн-собеседование с экспертами AXENIX
— получите оффер в тот же день!
Вакансии по Java-разработке открыты для кандидатов из городов, где представлены офисы AXENIX (Москва, Тверь, Санкт-Петербург, Ростов-на-Дону, Воронеж, Краснодар), а также специалистов, готовых к переезду.
Подробнее здесь
До встречи!
Реклама. ООО "АКСТИМ". ИНН 7705476338.
👍7❤4🔥2🎅1
Как ведут себя конфликтующие импорты?
• Классы текущего пакета доступны без импорта. Если импортируется другой класс, совпадающий с классом-соседом по пакету – сосед перекрывается. Будет использован импортированный класс, без ошибки.
• Если в class-файле существует несколько разных классов с одинаковыми именами, объявленных здесь же или импортированных – это приводит к ошибке компиляции.
• Импортировать один и тот же класс несколько раз допускается. Будет всего лишь warning о неиспользуемом импорте.
• Для статических импортов констант действуют те же правила. Обычные и статические импорты не конфликтуют друг с другом – для выбора достаточно контекста использования.
• Чтобы применять несколько классов/констант с одинаковыми именами в одном файле, придется обойтись без импортов. Нужно будет обращаться по их полным именам, с указанием пакета.
• Классы текущего пакета доступны без импорта. Если импортируется другой класс, совпадающий с классом-соседом по пакету – сосед перекрывается. Будет использован импортированный класс, без ошибки.
• Если в class-файле существует несколько разных классов с одинаковыми именами, объявленных здесь же или импортированных – это приводит к ошибке компиляции.
• Импортировать один и тот же класс несколько раз допускается. Будет всего лишь warning о неиспользуемом импорте.
• Для статических импортов констант действуют те же правила. Обычные и статические импорты не конфликтуют друг с другом – для выбора достаточно контекста использования.
• Чтобы применять несколько классов/констант с одинаковыми именами в одном файле, придется обойтись без импортов. Нужно будет обращаться по их полным именам, с указанием пакета.
👍14❤4
I like techno — подкаст о технологиях в сервисах Яндекса
Запустили подкаст, где специалисты Яндекса говорят о том, как устроены простые приложения в наших гаджетах.
Первый эпизод посвящен технологиям Фудтеха — узнайте, как алгоритмы Еды и Лавки помогают доставлять продукты пользователям, несмотря на погодные условия и другие неопределенности.
Слушать на Яндекс Музыке
Смотреть на Youtube
Запустили подкаст, где специалисты Яндекса говорят о том, как устроены простые приложения в наших гаджетах.
Первый эпизод посвящен технологиям Фудтеха — узнайте, как алгоритмы Еды и Лавки помогают доставлять продукты пользователям, несмотря на погодные условия и другие неопределенности.
Слушать на Яндекс Музыке
Смотреть на Youtube
❤6👍3
Класс LinkedList
Это структура данных в виде связанного списка. C помощью нее можно быстро добавлять элементы, но будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
addFirst() / offerFirst() — добавляет элемент в начало списка. addLast() / offerLast() — в конец.
removeFirst() / pollFirst() — удаляет первый элемент из начала списка. removeLast() / pollLast() — с конца списка.
getFirst() / peekFirst(); getLast() / peekLast() — возвращает первый/последний элемент списка.
Это структура данных в виде связанного списка. C помощью нее можно быстро добавлять элементы, но будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
addFirst() / offerFirst() — добавляет элемент в начало списка. addLast() / offerLast() — в конец.
removeFirst() / pollFirst() — удаляет первый элемент из начала списка. removeLast() / pollLast() — с конца списка.
getFirst() / peekFirst(); getLast() / peekLast() — возвращает первый/последний элемент списка.
👍23🔥4❤3
Готовы улучшить свое владение Java?
Присоединяйся к нашему каналу - https://t.me/java_secrets 📲
Свежие советы, лучшие практики, примеры кода и обсуждения, чтобы стать настоящим профессионалом в программировании на Java.
Повышай свой уровень!
Присоединяйся к нашему каналу - https://t.me/java_secrets 📲
Свежие советы, лучшие практики, примеры кода и обсуждения, чтобы стать настоящим профессионалом в программировании на Java.
Повышай свой уровень!
❤4👍3😁2
Что будет со ссылкой на метод, если заменить объект-владельца?
Ответ на этот вопрос будет очевиден, если вы уверенно понимаете, что скрывается за терминами ссылки вообще и ссылки на метод.
Для нестатических методов работает позднее связывание. По этой причине, когда мы обращаемся к такому методу по ссылке, то получаем метод экземпляра, а не типа переменной. На примере с изображения ниже метод класса A не будет затронут.
Факт позднего связывания в этом вопросе может ввести в заблуждение. Связывание случается в момент обращения, а не вызова. В результате в переменной хранится неизменяемая копия ссылки на метод. Она ведет на метод объекта, а не хранящей его переменной. Поэтому переприсвоение переменной позже не окажет на ссылку никакого эффекта.
Для достижения реального связывания в момент вызова в байткоде существует инструкция invokedynamic. Однако гораздо проще добиться того же результата, если использовать поведенческий паттерн ООП, например, посетителя.
Ответ на этот вопрос будет очевиден, если вы уверенно понимаете, что скрывается за терминами ссылки вообще и ссылки на метод.
Для нестатических методов работает позднее связывание. По этой причине, когда мы обращаемся к такому методу по ссылке, то получаем метод экземпляра, а не типа переменной. На примере с изображения ниже метод класса A не будет затронут.
Факт позднего связывания в этом вопросе может ввести в заблуждение. Связывание случается в момент обращения, а не вызова. В результате в переменной хранится неизменяемая копия ссылки на метод. Она ведет на метод объекта, а не хранящей его переменной. Поэтому переприсвоение переменной позже не окажет на ссылку никакого эффекта.
Для достижения реального связывания в момент вызова в байткоде существует инструкция invokedynamic. Однако гораздо проще добиться того же результата, если использовать поведенческий паттерн ООП, например, посетителя.
👍30🔥5❤2
В чем различие между приватным конструктором и финальным классом?
Ограничение области видимости конструктора до private не дает вызвать его из наследника, что приводит к невозможности наследоваться. Это свойство часто используется для утилитарных классов и синглтонов. Если применить порождающий паттерн, то можно вернуть возможность инстанцирования извне.
Если добавить объявлению класса модификатор final, это также запретит от него наследоваться, уже без излишнего ограничения на использование конструктора снаружи. Это основное применение этих двух подходов.
С точки зрения возможности наследования, ограничение через private конструктор более слабое. От такого класса, если он не финальный, можно наследовать внутренние и вложенные подклассы. Публичный вложенный класс может сработать как «паблик морозов» – дать внешним классам наследоваться через себя.
Ограничение области видимости конструктора до private не дает вызвать его из наследника, что приводит к невозможности наследоваться. Это свойство часто используется для утилитарных классов и синглтонов. Если применить порождающий паттерн, то можно вернуть возможность инстанцирования извне.
Если добавить объявлению класса модификатор final, это также запретит от него наследоваться, уже без излишнего ограничения на использование конструктора снаружи. Это основное применение этих двух подходов.
С точки зрения возможности наследования, ограничение через private конструктор более слабое. От такого класса, если он не финальный, можно наследовать внутренние и вложенные подклассы. Публичный вложенный класс может сработать как «паблик морозов» – дать внешним классам наследоваться через себя.
👍22❤2🔥1
Всё об опенсорсе: мастер-классы, круглый стол, задачки и призы
Когда: 23 апреля
Где: Москва, «Агломерат» + онлайн-трансляция
О чем: вы узнаете, как сделать документацию и лендинг, выбрать правильную лицензию для опенсорс-проекта и выйти в открытый доступ.
А еще познакомитесь с разработчиками из Яндекса и других компаний, победителями Программы грантов Yandex Open Source, порешаете задачки и получите за них призы.
Регистрация на Yandex Open Source Jam по ссылке.
Когда: 23 апреля
Где: Москва, «Агломерат» + онлайн-трансляция
О чем: вы узнаете, как сделать документацию и лендинг, выбрать правильную лицензию для опенсорс-проекта и выйти в открытый доступ.
А еще познакомитесь с разработчиками из Яндекса и других компаний, победителями Программы грантов Yandex Open Source, порешаете задачки и получите за них призы.
Регистрация на Yandex Open Source Jam по ссылке.
👍7❤3🔥2
Можно ли переопределить статический метод?
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
👍24❤4
❓Как разработчикам эффективно хранить данные в NoSQL?
Приходите на вебинар «Создание словаря» от OTUS и узнайте. На этом открытом уроке вы:
- реализуете популярную структуру данных «ассоциативный массив» для хранения пар (ключ, значение);
- рассмотрите два способа решения этой задачи;
- сравните их эффективность.
Занятие пройдёт 10 апреля в 20:00 мск в рамках набора на онлайн-курс «Алгоритмы и структуры данных». Спикер — опытный программист и преподаватель языка Java.
Для всех, кто запишется на бесплатный вебинар, будет доступна специальная цена — вы сможете обсудить свое обучение с менеджерами OTUS.
👉 Пройдите короткий тест прямо сейчас, чтобы посетить открытый урок: https://otus.pw/kbae/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите на вебинар «Создание словаря» от OTUS и узнайте. На этом открытом уроке вы:
- реализуете популярную структуру данных «ассоциативный массив» для хранения пар (ключ, значение);
- рассмотрите два способа решения этой задачи;
- сравните их эффективность.
Занятие пройдёт 10 апреля в 20:00 мск в рамках набора на онлайн-курс «Алгоритмы и структуры данных». Спикер — опытный программист и преподаватель языка Java.
Для всех, кто запишется на бесплатный вебинар, будет доступна специальная цена — вы сможете обсудить свое обучение с менеджерами OTUS.
👉 Пройдите короткий тест прямо сейчас, чтобы посетить открытый урок: https://otus.pw/kbae/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤3👍1🔥1
Привет. За 9 минут вы узнаете, как писать unit тесты с помощью библиотек junit и mockito.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
ТЕСТИРОВАНИЕ НА JAVA (JUNIT, MOCKITO)
Привет. За 9 минут вы узнаете, как писать unit тесты с помощью библиотек junit и mockito.
Код из видео:
https://github.com/dispikerton/testirovanie
Код из видео:
https://github.com/dispikerton/testirovanie
👍20🔥5❤4
Практический вебинар для веб-разработчиков — изучите основные подходы в обеспечении масштабируемости и отказоустойчивости микросервисов с помощью организации очереди сообщений
Приходите на бесплатный практический урок «Очереди и отложенное выполнение на примере RabbitMQ в .Net» от OTUS, где вы вместе с опытным экспертом разберете:
1. ситуации, когда приходится решать проблему отложенного выполнения и асинхронной обработки;
2. как брокеры сообщений позволяют организовать коммуникацию нескольких сервисов между собой;
3. основные инструменты построения очередей сообщений, их возможности и преимущества;
4. построение очередей сообщений с помощью RabbitMQ и .Net Web Api на практике.
Занятие пройдёт 16 апреля в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://otus.pw/g92Ap/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приходите на бесплатный практический урок «Очереди и отложенное выполнение на примере RabbitMQ в .Net» от OTUS, где вы вместе с опытным экспертом разберете:
1. ситуации, когда приходится решать проблему отложенного выполнения и асинхронной обработки;
2. как брокеры сообщений позволяют организовать коммуникацию нескольких сервисов между собой;
3. основные инструменты построения очередей сообщений, их возможности и преимущества;
4. построение очередей сообщений с помощью RabbitMQ и .Net Web Api на практике.
Занятие пройдёт 16 апреля в 20:00 мск и будет приурочено к старту курса «Highload Architect». Доступна рассрочка на обучение!
Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: https://otus.pw/g92Ap/
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍3❤2🔥2