Вот приходишь ты такой на собеседование. Думаешь что уже давно учишься, ООП используешь вполне успешно... И тут тебе дают несколько задачек. И начинается какой-то АДЪ! Вроде, с виду простая хрень, но работает совсем не так! Попробуйте сначала ответить, а потом запускать в ИДЕ. Я, по-моему, ни разу не попал :) Задача 1
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test1() {
    Integer i = Integer.valueOf(1);
    inc(i);
    System.out.println(i);
}

private static void inc(Integer i) {
    i++;
}
Задача 2
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test1() {
    String i =1;
    inc(i);
    System.out.println(i);
}

private static void inc(String s) {
    s = s +2;
}
Задача 3
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test2() {
    Integer i1 = Integer.valueOf(717);
    Integer i2 = Integer.valueOf(717);
    System.out.println(i1 == i2);
}
Задача 4
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test3() {
    System.out.println(show(10));
    System.out.println(show(11));
}

private static int show(Integer i) {
    return (i % 2 == 0 ? null : i + 1);
}
Задача 5
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test4() {
    A a = new B();
    printInfo(a);
    printInfo(null);
}

private static void printInfo(A a) {
    a.foo();
}

private static class A {
    public static void foo() {
        System.out.println("class A");
    }
}

private static class B extends A {
    public static void foo() {
        System.out.println("class B extends A");
    }
}


Alexander 17:55
// ------------ Что выведет данный тест? -------------
@Test
@Ignore
public void test5() {
    List<Thread> threads = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        threads.add(new Thread(new ThreadImpl()));
    }
    threads.forEach(Thread::start);
    threads.forEach(t -> {
        try {
            t.join();
        } catch (InterruptedException ignored) {
        }
    });
}

private static class ThreadImpl implements Runnable {

    private static int counter = 0;

    @Override
    public synchronized void run() {
        int localValue = ++counter;
        try {
            Thread.sleep((long) (Math.random() * 20));
        } catch (InterruptedException ignored) {
        }
        System.out.println(localValue);
    }
}