자바 더미 와 스 택 및 매개 변수 전달
4967 단어 자바 0 부터 1 까지
스 택 에 저장 할 내용:
위치.
내용.
쌓다
대상 인 스 턴 스 (배열 포함)
창고.
기본 데이터 형식, 더미 속 대상 참조 (주소)
접근 속도 비교:
창고 의 액세스 속도 가 더미 보다 빠르다.
내용 회수 메커니즘:
스 택 에 있 는 변수 나 대상 이 인용 한 생존 주 기 는 이미 알 고 있 습 니 다. 즉, 자신의 역할 영역 을 초과 하면 즉시 회수 되 는 것 입 니 다.쌓 인 대상 은 JVM 의 GC 에 맡 기 고 언제 회수 하 느 냐 는 GC 에 달 려 있 으 며 회수 대상 전에 대상 의 finalize () 방법 이 호출 됩 니 다.
내용 수명 주기:
자바 대상 이 쌓 여 있 는 라 이 프 사이클 스 택 에 있 는 내용 의 라 이 프 사이클: 그 역할 영역;
2. 자바 의 매개 변수 전달
자바 에서 함수 가 호출 하 는 매개 변수 전달 방식 은 값 만 전달 합 니 다.1. 기본 데이터 형식 변수 에 대해 스 택 중간 값 의 복사 본 을 전달 합 니 다. 함수 에서 변수 복사 에 대한 변 화 는 이 복사 에 만 영향 을 주 고 원 변수의 값 에 영향 을 주지 않 습 니 다.2. 대상 과 배열 에 대해 스 택 중간 값 (이때 의 값 은 대상 의 참조, 즉 주소, 대상 인 스 턴 스 가 아 닌) 의 복사 본 을 전달 하고 이 주소 복사 에 대한 변 화 는 이 복사 에 만 영향 을 주 며 원래 의 대상 과 배열 에 영향 을 주지 않 습 니 다.그러나 이 주소 가 가리 키 는 내용 에 대한 변 화 는 원래 의 내용 을 직접 바 꿉 니 다. 예 를 들 어 char [] 에 들 어가 주소 가 가리 키 는 첫 번 째 또는 다른 내용 (이때 직접 바 꾸 는 것 은 쌓 인 데이터) 을 바 꾸 면 원래 의 배열 에 영향 을 줄 수 있 습 니 다.예 를 들 어 대상 인 스 턴 스 eg 를 들 어 오 면 eg. xx (이때 쌓 인 데 이 터 를 직접 변경) 도 원래 의 대상 을 바 꾸 었 다.
예 3
고전 면접 문제:
public class Example{
String str=new String("good");
char[]ch={'a','b','c'};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
str="test ok";
ch[0]='g';
}
}
프로그램 실행 결 과 는:
good and gbc
그 이 유 는 String 과 char 배열 이 모두 더미 에 저 장 된 대상 이 고 복사 한 String 인용 을 직접 변경 하 는 것 은 변 경 된 스 택 에서 인용 한 복사 이 며 원래 참조 가 가리 키 는 더미 의 대상 실체 에 영향 을 주지 않 습 니 다. char 배열 안의 내용 을 바 꾸 는 것 은 중원 대상 을 직접 변경 한 것 입 니 다.
총결산
매개 변수 전달 에서 스 택 의 데 이 터 는 복사 이 므 로 원래 의 값 을 바 꿀 수 없 지만 대상 참조 로 더미 의 값 을 바 꿀 수 있 습 니 다.