>  기사  >  Java  >  매개변수는 값 또는 참조를 기반으로 Java에서 전달됩니까?

매개변수는 값 또는 참조를 기반으로 Java에서 전달됩니까?

王林
王林원래의
2024-01-30 09:09:151284검색

매개변수는 값 또는 참조를 기반으로 Java에서 전달됩니까?

Java의 매개변수 전달 방식은 값으로 전달되나요, 아니면 참조로 전달되나요?

Java에서는 매개변수 유형에 따라 매개변수가 값 또는 참조로 전달됩니다.

  1. 값으로 전달
    값으로 전달은 메서드가 호출될 때 실제 매개변수의 복사본을 메서드의 형식 매개변수에 전달하는 것을 의미합니다. 메소드의 형식 매개변수 값을 변경해도 실제 매개변수 값에는 영향을 미치지 않습니다.

샘플 코드는 다음과 같습니다.

public class PassByValueExample {
    public static void main(String[] args) {
        int number = 10;
        modifyValue(number);
        System.out.println("Number after method call: " + number);
    }
    
    public static void modifyValue(int value) {
        value = 20;
        System.out.println("Value inside method: " + value);
    }
}

출력 결과는 다음과 같습니다.

Value inside method: 20
Number after method call: 10

위 코드에서 modifyValue 메소드는 정수 유형 매개변수 value를 허용합니다. >. 메서드 내에서 value 값을 20으로 변경한 후 인쇄합니다. 그러나 main 메서드에서 number 값을 인쇄할 때 number가 여전히 10인 것으로 확인됩니다. 이는 형식 매개변수는 매개변수 값에 영향을 미치지 않습니다. modifyValue方法接受一个整数类型的参数value。在方法内部,将value的值改为20,然后打印出来。但是,在main方法中打印number的值时,发现number仍然是10,说明改变形式参数的值并不会影响实际参数的值。

  1. 引用传递(Pass by Reference)
    引用传递是指在方法调用时,实际参数的引用(内存地址)被传递给方法的形式参数。在方法中对形式参数所指向的对象进行修改,会改变实际参数所引用的对象的状态。

示例代码如下:

public class PassByReferenceExample {
    public static void main(String[] args) {
        StringBuilder name = new StringBuilder("Alice");
        modifyName(name);
        System.out.println("Name after method call: " + name);
    }
    
    public static void modifyName(StringBuilder builder) {
        builder.append(" Smith");
        System.out.println("Name inside method: " + builder);
    }
}

输出结果如下:

Name inside method: Alice Smith
Name after method call: Alice Smith

在上述代码中,modifyName方法接受一个StringBuilder类型的参数builder。在方法内部,将builder所指向的对象追加了" Smith",然后打印出来。在main方法中打印name时,发现name变成了"Alice Smith",说明改变形式参数的值会影响实际参数所引用的对象的状态。

需要注意的是,虽然Java中存在引用传递的情况,但是Java并没有提供直接通过引用改变实际参数值的方式。比如,不能通过在方法中给形式参数分配新的内存地址来改变实际参数的引用。

总结起来,Java中的参数传递方式是根据参数的类型来决定的。对于基本数据类型(如intchar

    Pass by Reference🎜Pass by reference는 메소드가 호출될 때 실제 매개변수의 참조(메모리 주소)가 메소드의 형식 매개변수로 전달되는 것을 의미합니다. 메소드의 형식 매개변수가 가리키는 객체를 수정하면 실제 매개변수가 참조하는 객체의 상태가 변경됩니다. 🎜🎜🎜샘플 코드는 다음과 같습니다. 🎜rrreee🎜출력 결과는 다음과 같습니다. 🎜rrreee🎜위 코드에서 modifyName 메소드는 StringBuilder 유형 매개변수를 허용합니다. 빌더 코드>. 메소드 내에서 <code>builder가 가리키는 객체에 "Smith"가 추가된 후 인쇄됩니다. main 메소드에서 name을 인쇄할 때 name이 "Alice Smith"로 변경된 것으로 나타났습니다. 이는 형식 매개변수의 값이 변경되었음을 나타냅니다. 실제 매개변수에 영향을 미칩니다. 🎜🎜Java에는 참조 전달이 있지만 Java에서는 참조를 통해 실제 매개변수 값을 직접 변경할 수 있는 방법을 제공하지 않는다는 점에 유의하세요. 예를 들어, 메소드의 형식 매개변수에 새 메모리 주소를 할당하여 실제 매개변수의 참조를 변경할 수 없습니다. 🎜🎜요약하자면, Java의 매개변수 전달 방법은 매개변수의 유형에 따라 결정됩니다. 기본 데이터 유형(예: int, char 등)의 경우 객체 유형의 경우 값으로 전달하고 참조로 전달합니다. 값으로 전달하는 것은 단순히 실제 매개변수의 복사본에서 작동하는 반면, 참조로 전달하는 것은 실제 매개변수가 참조하는 객체에서 작동합니다. 🎜

위 내용은 매개변수는 값 또는 참조를 기반으로 Java에서 전달됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.