13 줄 짜 리 자바 애플 릿 부터

3656 단어
머리말
요 며칠 자바 의 기초 지식 포 인 트 를 뒤 져 보면 모 르 겠 습 니 다. 원래 자신의 기 초 를 이렇게 못 배 웠 습 니 다. 이것 은 자바 함수 매개 변수 전달 에 실패 한 것 입 니 다. 도대체 자바 에서 매개 변수 가 값 전달 인지 인용 전달 인지 오늘 잘 정리 하 겠 습 니 다.
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;   
 }
}

좋은 웹페이지 즐겨찾기