인덱스가 주소 전달인지 값 전달인지
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
결합이란 무엇입니까?결합을 풀 수 있는 방법은 몇 가지가 있습니까?프로젝트의 개발 과정에서 우리는 프로젝트의 코드 모듈이 가능한 한 낮은 결합과 높은 내집합을 하도록 강조하지만 무엇이 결합입니까?어떻게 저결합을 할 수 있습니까?많은 사람들이 의문을 느낄 수 있으니 다음은 결합이 무...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.