[자바]integer 가 주소 전달 인지 값 전달 인지

5514 단어 자바 언어 기초
다음으로 이동:http://www.tuicool.com/articles/AraaQbZ
integer 가 주소 전달 인지 값 전달 인지
Integer 는 전 삼 할 때 주소 로 전 달 됩 니 다. , 다음 과 같은 예 를 참고 하여 프로그램 이 시작 되 었 을 때 Integer 의 index 대상 을 잠 그 고 wait 방법 을 호출 하여 잠 긴 자원 을 방출 하고 notify 를 기 다 렸 습 니 다.마지막 으로 5 초 후에 testObject 가 notify 방법 을 호출 하면 계속 실 행 됩 니 다.모두 가 알다 시 피 자물쇠 의 대상 과 방출 된 대상 은 반드시 동일 해 야 한다.그렇지 않 으 면 던 질 것 이다  java.lang.IllegalMonitorStateException 。이 를 통 해 Integer 가 매개 변수 로 전달 할 때 주소 전달 이지 값 전달 이 아니 라 는 것 을 증명 할 수 있다.
public class IntegerSyn {
  
  public static void main(String[] args) throws InterruptedException {
    Integer index = 0;
    TestObject a = new TestObject(index);
    synchronized (index) {
      new Thread(a).start();
      index.wait();
    }
    System.out.println("end");
  }
}

class TestObject implements Runnable {
  private Integer index;
  
  public TestObject(Integer index){
    this.index = index;
  }
  
  public void run() {
    try {
      TimeUnit.SECONDS.sleep(5);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    synchronized (index) {
      index.notify();
    }
  }
}

다음 코드 를 실행 할 때 두 번 의 출력 결과 가 같은 이 유 를 묻 는 사람 이 있 을 것 이다.
public static void main(String[] args) throws InterruptedException {
    Integer index = 0;
    System.out.println(index);
    test(index);
    System.out.println(index);
  }
  
  public static void  test(Integer index){
    index++;
  }

이 유 는 간단 합 니 다.Integer 클래스 의 final value 필드 를 볼 수 있 습 니 다.integer 클래스 가 생 성 되면 그의 값 이 수정 되 지 않 는 다 는 것 을 설명 합 니 다.index+에 있 을 때 Integer 는 새로운 클래스 를 만 들 었 기 때문에 이 두 번 째 출력 할 때 결 과 는 같 습 니 다!
private final int value;

좋은 웹페이지 즐겨찾기