Как правильно сравнивать строки в Java, игнорируя регистр букв?​

Для этой задачи у класса java.lang.String есть метод equalsIgnoreCase, который сравнивает строки, не обращая внимания на разницу в регистрах букв.

Как правильно сравнивать строки в Java?​

Так как оператор «==» сравнивает на идентичность только примитивы и ссылки на объект, в java для сравнения строк используется метод equals(), наследуемый от класса Object и реализованный в классе java.lang.String. Метод сравнивает строку, на которой он вызван, со строкой, которую в него передали и возвращает true или false.

Выводом вышеуказанного кода будет сначала false, затем true.

В чём отличие i++ от ++i?​

Унарный оператор инкремента в java может записываться как после переменной, так и перед ней. В случае, когда инкремент стоит в конце- сначала используется значение переменной, а уже затем к ней прибавляется единица. В случае же когда инкремент в начале — первой прибавляется единица, а уже потом увеличенная переменная используется в выражении.

В чём отличие wait(100) от sleep(100)?​

Оба метода используются в механизме многопоточности в Java. wait(long ms) можно вызвать в синхронизированном блоке кода с целью поставить нить на паузу на время, переданное внутрь метода или же пока другая нить не дёрнет уснувшую методом notify или notifyAll. Главное в том что wait после вызова освобождает мютекс захваченного монитора и другая нить может выполнять освобождённый блок кода.
Метод sleep(long ms) отправляет нить в сон на переданное время, и нить будет на паузе отведённые миллисекунды, если не произойдёт исключительной ситуации. «Легальных» способов без исключений вырвать нить из sleep не предусмотрено. Вызванный в синхронизированном блоке метод sleep не обеспечивает освобождение мютекса.

Что такое try-with-resources?​

Данная конструкция(try-with-resources) появилась в java 7, она позволяет использовать блок try-catch не заботясь о закрытии ресурсов, используемых в данном сегменте кода.
Ресурсы объявляются в скобках сразу после try, а компилятор уже сам неявно создаёт секцию finally в которой и происходит закрытие без участия разработчика. Конструкция является так называемым «синтаксическим сахаром» и создана для облегчения жизни программиста. Под ресурсами подразумеваются сущности, реализующие интерфейс java.lang.Autocloseable Общий вид конструкции выглядит следующим образом

Стоит заметить, что блоки catch и явный finally выполняются уже после того, как закрываются ресурсы в неявном finnaly.

В чём отличие final, finally, finalize?​

Скорее проще перечислить что есть у них общего… а это только корень final и то что они являются зарезервированными словами в Java.
final — модификатор, применяющийся к классам, методам, переменным. В общем своём представлении делающий объект своего действия неизменным, а если быть точнее, то после его применения:
-от класса становится невозможно наследоваться;
-метод невозможно переопределить;
-переменную невозможно изменить(но в случае, если переменная-это ссылка на объект, то на состояние объекта final никак не влияет, если только класс сам не является final).
finalize() является методом класса Object.
finally является частью конструкции try-catch-finally, в где играет роль блока, который выполняется независимо от событий происходящих в try-catch и выполняется в любом случае.

Для чего нужен метод finalize()?​

Метод finalize() служит для уничтожения объектов, он вызывается автоматически сборщиком мусора. Его можно использовать как последний шанс закрыть ресурс. Но никак не первый. Использование finalize() стоит сократить к минимуму. Согласно Джошуа Блоху этот метод замедляет работу сборщика мусора в ~430 раз. А это уже весомая причина задуматься перед его использованием. Также не стоит доверять важные процессы очистки методу по той причине, что сборщик мусора может быть и не вызван ни разу. Дополнительно почитать о методе на хабре тык и тык

Какое назначение у методов equals() и hashCode()?​

Методы используются для сравнения объектов. Их необходимо переопределять во вновь созданных классах. Метод equals() в изначальном виде просто сравнивает ссылки:

Создатели Java возложили полную ответственность на разработчиков, так как именно создатель класса знает как правильно сравнить его объекты. Метод возвращает true в случае, если объекты идентичны. Иначе false.

Метод hashCode() возвращает целое значение, основываясь на полях объекта. У метода существует контракт:

1. При повторном вызове (при условии что состояние объекта не менялось) hashCode() возвращает одно и то же значение. Но в различных приложениях хэшкоды одинаковых объектов могут различаться.

2. Два объекта, для которых equals() возвращает true, имеют одинаковый хэшкод.

3. Не обязательно, что у разных объектов разные хэшкоды.

Перечислите все методы класса Object

public final native Class<?> getClass();
public native int hashCode();
public boolean equals(Object obj)
protected native Object clone() throws CloneNotSupportedException;
public String toString()
public final native void notify();
public final native void notifyAll();
public final native void wait(long timeout) throws InterruptedException;
public final void wait(long timeout, int nanos) throws InterruptedException
public final void wait() throws InterruptedException
protected void finalize() throws Throwable