[자바]integer 가 주소 전달 인지 값 전달 인지
5514 단어 자바 언어 기초
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;