13 줄 짜 리 자바 애플 릿 부터
요 며칠 자바 의 기초 지식 포 인 트 를 뒤 져 보면 모 르 겠 습 니 다. 원래 자신의 기 초 를 이렇게 못 배 웠 습 니 다. 이것 은 자바 함수 매개 변수 전달 에 실패 한 것 입 니 다. 도대체 자바 에서 매개 변수 가 값 전달 인지 인용 전달 인지 오늘 잘 정리 하 겠 습 니 다.
public class Example {
String str = "hello";
StringBuffer sb = new StringBuffer("world");
public static void main(String[] args) {
Example ex = new Example();
ex.change(ex.str, ex.sb);
System.out.print(ex.str+" and "+ ex.sb);
}
void change(String str,StringBuffer sb){
str = "good";
sb.append(" haha");
}
}
위의 프로그램의 출력 결 과 는 다음 과 같 습 니 다.
hello and world haha
답 은 여기에 놓 습 니 다. 그러나 이 안 에는 두 개의 대상, String 과 StringBuffer 가 포함 되 어 있 습 니 다. 우 리 는 가장 간단 한 자바 기본 유형 부터 분석 합 시다.코드 를 올리다.public class Example {
int n =3;
public static void main(String[] args) {
Example tt = new Example();
tt.change(tt.n);
System.out.println(tt.n);
}
public void change(int n) {
n = 10;
}
}
정 답 출력 은 3. 이것 은 모두 가 이해 할 수 있 습 니 다. 자바 언어 에서 기본 유형 이 매개 변수 로 전 달 될 때 전달 하 는 것 은 값 의 복사 입 니 다. 아무리 전달 하 는 내용 을 바 꾸 더 라 도 원 치 는 변 하지 않 습 니 다.다음은 이 코드 를 바 꾸 어 대상 이 매개 변수 로 전 달 될 때 어떻게 되 는 지 살 펴 보 자.
public class Example {
StringBuffer sb = new StringBuffer("hello");
public static void main(String[] args) {
Example tt = new Example();
tt.change(tt.sb);
System.out.println(tt.sb);
}
public void change(StringBuffer sb) {
sb.append(" world!");
}
}
출력 결 과 는
hello world!
이 결 과 를 보면 대상 이 매개 변수 로 전 달 될 때 대상 의 인용 을 전 달 했 기 때문에 호출 방법 에서 해당 하 는 조작 을 하면 원래 대상 도 달라 질 수 있 습 니까?잠시 만 요. 서 두 르 지 말고 코드 를 고 쳐 서 보 세 요.public class Example {
StringBuffer sb = new StringBuffer("hello");
public static void main(String[] args) {
Example tt = new Example();
tt.change(tt.sb);
System.out.println(tt.sb);
}
public void change(StringBuffer sb) {
sb = new StringBuffer("hello world");
}
}
이 코드 는 무엇 을 출력 합 니까?hello world?정 답 은 NO 입 니 다. 출력 결 과 는 hello 입 니 다.사실 이 전 달 된 것 은 인용 입 니 다. 정확히 말 하면 인용 한 복사 입 니 다. 새로운 대상 이 생 긴 후에 이 인용 은 이 새로운 대상 을 가리 키 기 때문에 다음 에 어떤 조작 을 하 더 라 도 이 새로운 대상 만 을 대상 으로 하고 원래 대상 의 값 은 변 하지 않 습 니 다.자, 이제 첫 번 째 프로그램 을 돌 이 켜 보 겠 습 니 다. 여기 서 설명 하고 자 하 는 것 은 String 류 는 특수 한 유형 입 니 다. 그 에 대한 일부 조작 부 호 는 다시 불 러 옵 니 다. 예 를 들 어
String str = "hello";
등가 String str = new String("hello");
입 니 다. 이제 첫 번 째 프로그램의 패 배 를 이해 할 수 있 을 것 입 니 다. 호출 된 프로그램 에서 new 는 새로운 String 대상 이 생 겼 습 니 다.그리고 전 달 된 인용 은 새로운 대상 을 가리 키 고 전 달 된 StringBuffer 인용 은 직접 작 동 하기 때문에 출력 결과 String 대상 이 변 하지 않 고 StringBuffer 대상 이 바 뀌 었 습 니 다.총결산
기본 유형 에 대해 전달 하 는 매개 변 수 는 값 의 복사 이 고 호출 하 는 방법 에서 임 의 조작 을 하 는 것 은 원래 의 값 에 영향 을 주지 않 습 니 다.인용 유형 에 대해 전달 하 는 매개 변 수 는 인용 복사 이 고 이 인용 으로 직접 수정 하면 원래 대상 의 내용 도 달라 집 니 다.String 클래스 는 특수 한 final 클래스 로 서 원래 대상 에서 수정 할 수 없 기 때문에 모든 작업 은 새로운 String 대상 을 되 돌려 줍 니 다.자, 마지막 으로 애플 릿 을 붙 여 드 리 겠 습 니 다. 여러분 이 실행 하면 또 새로운 수확 이 있 을 거 라 고 믿 습 니 다 ~
public class Example {
char[] ch1 = {'1','2','3','4'};
char[] ch2 = {'a','b','c','d'};
public static void main(String[] args) {
Example tt = new Example();
tt.change(tt.ch1,tt.ch2);
System.out.println(tt.ch1);
System.out.println(tt.ch2);
}
public void change(char[] ch1,char[] ch2) {
char[] ch = {'d','c','b','a'};
ch1[0] = '0';
ch2 = ch;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.