Статическое значение для цикла for - PullRequest
0 голосов
/ 21 апреля 2019

Пожалуйста, не берите в голову, что название не могло придумать лучшего.Пожалуйста, измените его, если у вас есть предложения.Я пытаюсь выяснить, что здесь происходит.Допустим, у меня есть класс test.java

class test{
    public static void main(String[] args){
        for(int i=0;i<8;i++){
            new Testing().run();
        }
    }
}

И класс Testing.java

class Testing{
    private static String str = "";
    public void run(){
        if(str.equals("")){
            str = "ten";
        }else{
            str = "five";
        }
        System.out.println(str);
    }
}

Так что каждый раз при выполнении цикла и при создании объекта Testing не следуетповторно присвоить статическое строковое значение "" и вывести ten?Вывод, который я получаю:

ten
five
five
five
five
five
five
five

Разве вывод не должен быть ten все время из-за нового объекта тестирования и переназначения значения статической строки?

1 Ответ

2 голосов
/ 21 апреля 2019

Нет, потому что вы использовали статическую переменную.Статическая переменная является общей для всех экземпляров (или объектов) класса, поскольку она является переменной уровня класса.Другими словами, вы можете сказать, что только одна копия статической переменной создается и используется всеми экземплярами класса.Выделение памяти для таких переменных происходит только один раз, когда класс загружается в память.https://beginnersbook.com/2013/05/static-variable/

когда вы создаете объект, он содержит значение "". Когда вы вызываете run, str будет содержать десять, поскольку вы можете видеть напечатанное значение.После первой итерации, поскольку str не содержит "", она изменит свое значение на пять.

Любой созданный вами объект будет содержать то же значение для строки.

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