Почему инициализация i в методе insert () делает его значение 0, где, как и для строки j (которая не инициализирована), печатается как ожидалось?

   import java.io.*;
   class Stu
   {
    int id,i;
    String name,j;
    void insert(int id,String name)
    {
     System.out.println(id+" "+name);
     int i=id;
     j=name;
    }
    void display()
    {
     System.out.println(id+" "+name);
     System.out.println(i+" "+j);
    }
  }

 class New
 {
 public static void main(String[] args)
  {
  Stu s1=new Stu();
  s1.insert(101,"sriram");
  s1.display();
  }
 }

Вывод:

C: \ Users \ ASUS \ Рабочий стол> javac New.java

C: \ Users \ ASUS \ Рабочий стол> Java Новый

101 срирам

0 ноль

0 шрам

-1
SRIRAM GOVARDHANAM 5 Мар 2018 в 08:11

4 ответа

Лучший ответ

Здесь вы не инициализируете ту же переменную снова в методе insert, а создаете новую переменную с тем же именем внутри блока insert. Ваш запрос может быть суммирован с областью локальных переменных против глобальных переменных.

Когда вы объявляете и используете переменную, компилятор пытается разрешить эту переменную в самой узкой области действия. Как и в вашем случае, внутри метода insert вы создали переменную, а именно i, которая является локальной переменной для insert, и ее область действия пока вы не окажетесь внутри insert , Как только вы выходите из этого метода, он выходит из области видимости или умирает. Итак, вы инициализируете этот локальный i некоторым значением, которое умирает, когда вы выходите из insert.

Теперь, когда вы просите компилятор разрешить переменную i внутри display, компилятор сначала ищет все i, объявленные в локальной области видимости. Когда не найден, он будет искать в глобальной области видимости. Затем он находит i и печатает значение.

Пример из реальной жизни может быть: Предположим, есть парень Шрирам, который живет в вашем обществе. Теперь, когда кто-то звонит Шрираму в вашем доме, вы сразу же подскажете. Но если кто-то позвонит Шрираму, стоящему вдали от вашего дома, другой парень ответит.

0
Abhineet 5 Мар 2018 в 05:41

Из-за объема программы. Когда вы создаете «i» в начале вашего класса, эта функция доступна для каждой функции в классе; Вы не объявляете это как что-либо, поэтому его значение равно нулю.

В вашем методе insert () вы создаете новую переменную с именем i. Эта новая переменная i находится в стеке вызовов с вашей функцией вставки. Когда эта функция завершается при вызове, она «выходит из области видимости» и стирается из стека вызовов. Переменные в этой функции также стираются.

Когда вы вызываете display, оно использует значение "i", которое вы создали в начале класса.

0
Oppa 5 Мар 2018 в 05:23
void insert(int id, String name) {
            System.out.println(id + " " + name);
            **int i** = id;
            j = name;
        }

Видите, в функции вставки вы снова объявили int i.

Используйте как я = ID;

Под этим существует огромная разница между «переменной экземпляра» и «локальной переменной».

0
Umesh Kumar Sharma 5 Мар 2018 в 05:23

Измените метод вставки на

void insert(int id,String name)
    {
     System.out.println(id+" "+name);
     i=id; // notice that i changed this line
     j=name;
    }

Вы объявляете переменную с именем i в своем методе вставки, а затем присваиваете ей значение id. как только метод insert завершает выполнение этой локальной переменной i, она выходит из области видимости.

0
mightyWOZ 5 Мар 2018 в 05:41