인덱스가 주소 전달인지 값 전달인지

1673 단어 java 기초 학습
인덱스가 주소 전달인지 값 전달인지
Integer는 전참할 때 주소 전달이다. 다음과 같은 예를 들어 프로그램이 시작되었을 때 Integer의 index 대상을 잠그고wait 방법을 호출하여 잠긴 자원을 방출하고 notify를 기다렸다. 마지막으로 5초가 지나면testObject가 notify 방법을 호출하면 계속 집행된다.자물쇠의 대상과 방출의 대상은 반드시 동일해야 하며, 그렇지 않으면java를 던질 수 있다는 것을 모두가 알고 있다.lang.IllegalMonitorStateException .이로써 Integer가 매개 변수로 전달될 때 주소 전달이지 값 전달이 아니라는 것을 증명할 수 있다.
Java 코드 즐겨찾기 코드 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();  
    }  
}  

}
그럼 다음 코드를 실행할 때 왜 두 번의 출력 결과가 같냐고 물어보시는 분들이 계실 거예요.Java 코드 즐겨찾기 코드public static void main(String[] args) throws Interrupted Exception {Integer index = 0; System.out.println(index), test(index), System.out.println(index),}
public static void  test(Integer index){  
    index++;  
}  

이유는 간단합니다. Integer 클래스에서final의value 필드를 볼 수 있습니다. 인덱스 클래스가 만들어진 후에 그의 값은 수정될 수 없습니다. index++에서 인덱스는 새로운 클래스를 만들었기 때문에 이 두 번째 출력의 결과는 같습니다!Java 코드 private final int value;
원본 주소:http://cheng-xinwei.iteye.com/blog/2162232?utm_source=tuicool&utm_medium=referral

좋은 웹페이지 즐겨찾기