>  기사  >  웹 프론트엔드  >  Java의 값별 호출 및 참조별 호출에 대한 자세한 소개

Java의 값별 호출 및 참조별 호출에 대한 자세한 소개

不言
不言앞으로
2019-03-16 10:41:343705검색

이 글은 Java의 call by value와 call by reference에 대해 자세히 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

주제는 다음과 같습니다.

Java의 값별 호출 및 참조별 호출에 대한 자세한 소개

Java에서 매개변수를 전달하는 두 가지 방법

  1. 값별 호출: 전달되는 것은 정수 값 전달과 같은 값(기본 데이터 유형의 경우)입니다. 실제로 값으로 전달되는 메서드 호출 메서드에서 매개변수는 실제 매개변수의 복사본일 뿐입니다.
  2. 참조에 의한 호출: 전달되는 것은 객체에 대한 참조입니다(객체에 대한). 즉 전달되는 것은 객체의 주소입니다. 실제로 참조가 전달되면 참조의 새 복사본이 생성되고 이전 참조와 새 참조가 동시에 동일한 주소를 가리킵니다.

코드 예

public class TestJavaCallBy {

    // 测试值传递
    public static void testCallByValue(int value) {
        value *= 10;
    }

    // 测试引用传递
    public static void testCallByReference(StringBuilder sb) {
        sb.append(" - " + ZonedDateTime.now());
    }

    public static void main(String[] args) {

        // 测试值变量
        int param = 1;
        // 测试引用对象
        StringBuilder sb = new StringBuilder("666");

        // 测试
        System.out.println(param);
        testCallByValue(param);
        System.out.println(param);

        System.out.println(sb.toString());
        testCallByReference(sb);
        System.out.println(sb.toString());
    }
}

控制台输出结果
1
// 结果仍为1,因为参数传递的是实参的一份拷贝,对实参不造成影响
1 

666
// 传递的是引用的拷贝,新旧两个引用指向同一个对象(地址),因此append操作是作用在该对象上
666 - 2019-03-16T01:25:57.933038500+08:00[Asia/Shanghai]

그러면 다음과 같은 결론을 내릴 수 있습니다.

  1. 값에 의한 호출은 실제 매개변수의 값을 변경하지 않습니다.
  2. 참조에 의한 호출은 실제 매개변수의 참조 주소를 변경할 수 없습니다.
  3. 참조에 의한 호출은 가능합니다. 실제 매개변수를 변경해 보세요.

의 내용 그러면 이 질문에 대한 답은 이렇습니다.

위 내용은 Java의 값별 호출 및 참조별 호출에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제