Почему печать int статического значения дает значение нотации объекта вместо фактического значения - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь напечатать статическое значение типа int в основном методе java, когда я печатаю, он дает мне значение как [Ljava.lang.String;@7852e922 в качестве обозначения объекта вместо фактического значения.Не могли бы вы объяснить, что происходит внутри?

Кроме того, когда я пытаюсь использовать ClassName.varibaleName его рабочее и печатать правильное значение.Также, когда я печатаю, используя объект.это показывает правильный результат.

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

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

class Demo1 {

    static int a;

    public static void main(String a[]) {
        Demo1 demo1 = new Demo1();
        demo1.inc();
        Demo1 demo2 = new Demo1();
        demo2.inc();
        Demo1 demo3 = new Demo1();
        demo3.inc();
        System.out.print("Count value is=" + a);
        System.out.print(a);
        System.out.print("\n" + demo1.a);
        System.out.print(demo2.a);
        System.out.print(demo3.a);
    }

    public static void inc() {
        a = a + 1;
        System.out.println("Value a" + a);
    }

}

Я получаю ниже Результат:

Value a1
Value a2
Value a3
Count value is=[Ljava.lang.String;@7852e922[Ljava.lang.String;@7852e922
333

Но ожидаемое значение счетчика равно =3 вместо [Ljava.lang.String;@7852e922

1 Ответ

3 голосов
/ 23 сентября 2019

Ваш int a не виден в методе, который также имеет локальную переменную с именем String[] a (которая будет использоваться вместо).

Это называется "теневым копированием".«Ближайшее» определение переменной побеждает.

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

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