나는이 웹 사이트뿐 아니라 프로그래밍에 새로운 브랜드이기 때문에 무엇이든 망가 뜨리면 나를 용서해주십시오. 나는 여기에 내 코드를 올바르게 게시하는 방법을 알아내는 시간을 가지고있다.언제 'void'메서드가 매개 변수에 영향을 미치며 언제 원래 개체에 영향을 줍니까?
package tester;
import java.util.*;
public class Mainclass2 {
public static void main(String[] args) {
int y = 3;
int[] x = {1, 2, 3, 4};
editnumbersArray(x);
editnumbersNotArray(y);
System.out.println(x[2]); **//now this was changed from 3 to 9...**
System.out.println(y); //but this one went unchanged.
}
//this accepts 'x[]' into the 'a[]' parameter.
public static void editnumbersArray(int[] a){
a[2] = 9; **//<---why does this one CHANGE the actual x[2] instead of just a[2]?**
}
//this accepts 'y' into the 'a' parameter.
public static void editnumbersNotArray(int a){
a = 9; **//<--while this one only changes 'a' instead of 'y'?**
}
}
제 질문은 기본적으로 주석으로 입력되어 있습니다. 다른 메서드로 전달 된 int가 변경되지 않으면 메서드에 전달 된 배열이 원래 배열 (x [])의 값을 변경하는 이유는 무엇입니까? 나는 그것이 단순한 답이라고 확신하지만, 나의 연구를했을 때 무엇을 검색해야하는지 알 수 없었다. 나는 이것이 무엇을 부르는 지 알지 못하므로 내가 찾은 모든 것이 잘못된 길로 인도되었다. 어떤 도움을 주셔서 감사합니다 !!
수정 : 주소와 유추 해 줘서 고마워! 그것은 당신이 나에게 설명 할 수있는 가장 좋은 방법입니다. 그래서 기본적으로 매개 변수에 배열을 전달할 때 실제 값이 아닌 참조를 전달합니다. 따라서 내 메서드 내에서 조정할 때 배열이 참조하는 모든 내용이 변경됩니다. 이것도 목록에서 발생하는 것으로 나타났습니다. 그래서 목록은 실제로 값으로 전달되지 않습니까? 배열/목록 자체가 기본적으로 상관없이 내 방법 내에서 이름을 무엇을, 편집을 위해 전달되지 않는 것처럼 보인다 (이 경우에는 [].)이 페이지는 정말 정리
편집http://javadude.com/articles/passbyvalue.htm. 그리고 중복 된 질문을 게시하는 것에 대해 유감스럽게 생각합니다. 문제는 내가 무엇을 묻기 위해 노력하는지 알지 못했다는 것입니다. 나는이 용어가 "값에 의한 전달/참조"라는 말을 결코 들어 본 적이 없었으므로 이제 알겠습니다.
이 질문에 대한 더 나은 답변 중 하나는 이미 여러 가지 형식으로 질문되었습니다. http://stackoverflow.com/a/9404727/680925 – Perception
[Java가 "참조로 전달"인가요? ] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – delnan