getClass
Возвращает класс этого экземпляра. То есть результатом вызова
Подробнее об этом читайте на хабре.
Возвращает класс этого экземпляра. То есть результатом вызова
.getClass() переменной типа Foo может быть как Foo.class, так и .class любого из его подклассов. Компилятор страхуется от ClassCastException в рантайме подменой возвращаемого типа метода на Class<? extends Foo>.Подробнее об этом читайте на хабре.
👍11🔥2👎1
equals, hashCode
Эти два метода придуманы для использования в Java Collections Framework и связаны общим контрактом, для соблюдения которого переопределять их необходимо вместе. Методы обязательно нужно переопределить чтобы эффективно использовать экземпляры как ключи в HashMap или
Контракт:
1. Если объекты
2.
3. Ничто не может быть
По умолчанию
Подробная инструкция по переопределению этих методов описана в Effective Java Item 9 (больше деталей о волшебном числе 31 здесь).
Эти два метода придуманы для использования в Java Collections Framework и связаны общим контрактом, для соблюдения которого переопределять их необходимо вместе. Методы обязательно нужно переопределить чтобы эффективно использовать экземпляры как ключи в HashMap или
HashSet. HashMap работает тем эффективнее, чем «лучше» распределение хэшей.Контракт:
1. Если объекты
equals, у них должны быть одинаковые hashCode (не обязательно наоборот – коллизии допустимы!)2.
equals должен быть отношением эквивалентности3. Ничто не может быть
equals(null)
4. equals и hashCode должны возвращать одни и те же значения для одного и того же объекта при каждом последующем вызове, даже если состояние объекта изменилось. Это делает реализацию для изменяемых (mutable) объектов крайне сложной. По умолчанию
equals сравнивает на ==. С умолчательным hashCode дела обстоят интереснее: он зависит от реализации JVM, и может быть неожиданным. Например в OpenJDK 7 это случайное число. Подробная инструкция по переопределению этих методов описана в Effective Java Item 9 (больше деталей о волшебном числе 31 здесь).
👍9👎3🔥1
Даны следующие классы:
Anonymous Quiz
5%
Исключение RuntimeException.
59%
Исключение ClassCastException.
19%
Успешный запуск и отработка.
17%
Ошибка компиляции.
👍15🔥6🍌1
Чем отличаются два интерфейса Runnable и Callable?
• Интерфейс
• Классы, реализующие интерфейс
• Метод
• Метод
• Интерфейс
Runnable появился в Java 1.0, а интерфейс Callable был введен в Java 5.0 в составе библиотеки java.util.concurrent;• Классы, реализующие интерфейс
Runnable для выполнения задачи должны реализовывать метод run(). Классы, реализующие интерфейс Callable - метод call();• Метод
Runnable.run() не возвращает никакого значения, Callable.call() возвращает объект Future, который может содержать результат вычислений;• Метод
run() не может выбрасывать проверяемые исключения, в то время как метод call() может.👍16🔥5
Что выведет на экран следующий код?
Anonymous Quiz
54%
Tt.iss.onethodA 1
14%
Tt.iss.onethodA 2
8%
Tt.iss.onethodA 0
6%
Ошибка выполнения
17%
Ошибка компиляции
👍21❤1
Что такое string-pool? В чем отличие cоздания строки через new от литерала? Что такое String.intern()?
string-pool — структура в памяти, хранящая массив всех строк-литералов программы.
String.intern(), соответственно, вернет строку из пула, при наличии таковой. Полезно при сравнениях вида:
string-pool — структура в памяти, хранящая массив всех строк-литералов программы.
String.intern(), соответственно, вернет строку из пула, при наличии таковой. Полезно при сравнениях вида:
new String("hello").intern() == new String("hello").intern()
Т.к без интернирования пришлось бы сравнивать строки через equals, что может быть медленнее при наличии длинных строк. В данном случае возвращается ссылка на один и тот же объект строки из пула, и проверка проходит с true.👍19
Что напечатает следующий код?
Anonymous Quiz
40%
Код не скомпилируется
3%
Код скомпилируется, но ничего не напечатает
48%
Код скомпилируется и напечатает 3
5%
Код скомпилируется, но во время выполнения возникнет исключение
4%
Ничего из вышеперечисленного
👍15⚡3👎1🔥1
Почему хранить пароль предпочтительнее в char[]/byte[], а не в String?
• Строка в виде литерала сразу раскрывает пароль, плюс она всегда хранится в string-пуле
• byte[]/char[] возможно сбросить после использования, и удалить все ссылки на него
• Строка в виде литерала сразу раскрывает пароль, плюс она всегда хранится в string-пуле
• byte[]/char[] возможно сбросить после использования, и удалить все ссылки на него
👍29🔥1
Что произойдет при выполнении такого кода?
Anonymous Quiz
34%
Ошибка компиляции в 4-й строке
20%
Ошибка компиляции в 5-й строке
10%
Ошибка компиляции в 6-й строке
10%
Ошибка компиляции в 7-й строке
20%
Будет выведено на консоль: [1.5] [1.5]
6%
Ошибка выполнения
👍15👎7❤1🔥1
Приведите пример нарушения симметрии equals
1. Создать класс Point2D c полями x,y: double
2. Унаследовать от него класс ColoredPoint2D c доп. полем color
3. a: Point2D
4. b: ColoredPoint2D
5. a.equals(b), !b.equals(a)
1. Создать класс Point2D c полями x,y: double
2. Унаследовать от него класс ColoredPoint2D c доп. полем color
3. a: Point2D
4. b: ColoredPoint2D
5. a.equals(b), !b.equals(a)
👍13👎2🏆1
Какой будет результат?
Anonymous Quiz
14%
howl woof sniff
5%
howl howl затем ошибка
17%
howl howl sniff
9%
howl woof затем ошибка
20%
Ошибка компиляции в строке 12
35%
Ошибка компиляции в строке 13
👍25👏2
Примитивы, врапперы. Package/unpackage (boxing/unboxing).
• Типы примитивы не создаются в куче, их жизненный цикл ограничен жизненным циклом стек-фрейма
• Package — создание типа-обертки в хипе для аналогичного типа-примитива, например при объявлении аргумента как Integer, и при передаче int в качестве аргумента. Unpackage — обратная операция
• Типы примитивы не создаются в куче, их жизненный цикл ограничен жизненным циклом стек-фрейма
• Package — создание типа-обертки в хипе для аналогичного типа-примитива, например при объявлении аргумента как Integer, и при передаче int в качестве аргумента. Unpackage — обратная операция
👍13
Каким будет результат выполнения следующего кода?
Anonymous Quiz
35%
0
46%
-1
4%
Ничего из перечисленного
16%
Ошибка компиляции
👍28🔥5😁1
Сравнение по == и по equals
• Сравнение по "==" — сравнение по ссылкам
• Сравнение по «equals» — если переопределен equals, то это сравнение эквивалентности объектов по их полям, если нет — по ссылкам на объекты
• Сравнение по "==" — сравнение по ссылкам
• Сравнение по «equals» — если переопределен equals, то это сравнение эквивалентности объектов по их полям, если нет — по ссылкам на объекты
👍19🍌1