если переменная находится в той же области видимости, вы получите ошибку компилятора; однако, как вы выяснили, если переменная находится в другой области видимости, вы замаскируете первое объявление.

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

Я определил два поля в своем классе, одно ссылочного типа и одно примитивного типа. В конструкторе класса я пытаюсь инициализировать их некоторыми пользовательскими значениями.

Когда я позже запрашиваю значения этих полей, они возвращаются со значениями по умолчанию Java для них,null для ссылочного типа и 0 для примитивного типа. Почему это происходит?

Вот воспроизводимый пример:

public class Sample {
    public static void main(String[] args) throws Exception {
        StringArray array = new StringArray();
        System.out.println(array.getCapacity()); // prints 0
        System.out.println(array.getElements()); // prints null
    }
}

class StringArray {
    private String[] elements;
    private int capacity;
    public StringArray() {
        int capacity = 10;
        String[] elements;
        elements = new String[capacity];
    }
    public int getCapacity() {
        return capacity;
    }
    public String[] getElements() {
        return elements;
    }
}

Я ожидалgetCapacity() вернуть значение 10 иgetElements() вернуть правильно инициализированный экземпляр массива.

Ответы на вопрос(4)

Ваш ответ на вопрос