Java 변수 선언, 메모리 할당 및 초기화 정보

인스턴스는 다음과 같습니다.

class Person
{
  String name;
  int age;
  void talk()
  {
    System.out.println(" : "+name+",  : "+age+" ");
  }
}
 
public class TestJava2_1
{
  public static void main(String args[])
  {
    Person p;
    if (p == null)
    {
      p = new Person();
    }
     
    p.name = " ";
    p.age = 25;
    p.talk();
  }
}

자바에서 변수의 사용 방식을 더 잘 이해하기 위해 우리는 실험을 하나 한다.위 코드를 TestJava2_ 로 저장1.java 파일, 이후 "javac TestJava2_1.java"명령을 실행하여 코드를 바이너리 파일로 컴파일합니다.
컴파일할 때 오류가 보고됩니다. 오류는 다음과 같습니다.
"TestJava2_1.java:59: 오류: 변수 p가 초기화되지 않았을 수 있습니다."
컴파일러는 인용 데이터 형식 변수 p가 초기화되지 않았기 때문에null과 같은지 판단할 수 없지만, 컴파일러가 이 오류에 대한 설명이 정확하지 않다고 생각합니다.변수 p가 초기값을 주지 않아도 기본값이 최소한 존재한다면 기본값과null을 비교하면 안 될 것이 뭐가 있겠는가.나는 정확한 오류 설명은 "변수 p가 메모리 공간을 분배하지 않았다"는 것이라고 생각한다.'Person p'는 인용 데이터 형식 변수 p가 있음을 설명하는 것일 뿐, p에 메모리 공간을 분배하지 않았다는 점은 C/C++와 다르다.
변수 p의 설명을 "Person p = null"로 바꾸면 "javac TestJava2_1.java"를 실행하면 성공적으로 컴파일할 수 있습니다.이를 통해 알 수 있듯이 "Person p =null"문장은 변수 p의 초기 값을 부여하는 것 외에 값을 부여하기 전에 변수 p에 메모리 공간을 분배했다.
위의 실험에서 알 수 있듯이 자바에서 데이터 형식 변수를 인용하는 메모리 분배는 초기 값을 부여할 때 진행된다.같은 방법으로 Java의 기본 데이터 형식 변수를 테스트하면 변수가 설명할 때 메모리를 분배하지 않고 진정한 메모리 분배는 초기 값을 부여할 때 진행되는 것을 발견할 수 있다.
주석에 오류가 있습니다. inta라면;
a 변수는 메모리 단원을 분배한 것이다.a 기본값은 0입니다.
그래서 기본 형식은 설명할 때 메모리 단원을 분배합니다.
이상의 자바 변수에 대한 성명, 메모리 분배 및 초기화에 대한 상세한 설명은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기