-1
이것은 의미론의 경우 일 수 있지만 실용적인 문제로서 Java는 절대적으로 pass-by-value 방식으로 절대적으로 작동한다는 것을 발견했습니다. . 예를 들면 다음에Java Pass-by-Reference 혼란/예제
public String example() {
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
String sResult = "Example:";
GregorianCalendar CAL = new GregorianCalendar(2016, 0, 1); //January 1, 2016
sResult += "\nBegin: CAL = " + f.format(CAL.getTime());
passTo(CAL);
sResult += "\nEnd: CAL = " + f.format(CAL.getTime());
return sResult;
}
public void passTo(GregorianCalendar CAL) {
CAL.add(CAL.DAY_OF_YEAR, 56);
}
실행 예()을 초래할 것이다
Example:
Begin: CAL = 2016-01-01
End: CAL = 2016-02-26
분명히 passTo 방법 인수로 CAL 객체를 취한 예에 포함 된 원래의 오브젝트를 조작하고, 영향(). 원래 객체가 변경된 경우 값만 전달되었다고 주장 할 수있는 사람은 누구입니까?
이것은 프로그래밍에서 일반적으로 이해되는 참조 기준 전달의 정의에 맞을 것입니다.
자바 **는 ** *** *** 값으로 전달됩니다. 그러나 참조 유형 (즉,'Object') **의 값은 ** a * reference *입니다. 다른 말로하자면, 'CAL'은 '그레고리오 캘린더'가 아니며 'CAL'은 '그레고리오 캘린더'에 대한 참조입니다. –
_ 이것은 프로그래밍에서 일반적으로 이해되는 참조 기준 전달에 적합합니다. _ 참조 기준 _은 객체가 아닌 변수에 적용되는 개념입니다. 개념과 이름은 Java의 참조 값과 아무 관련이 없습니다. –
이것은 사용자의 완전한 논리적 실패입니다. 인수가 메소드에 전달되면 메소드의 조치가 원래 오브젝트를 변경합니다. 이것은 참조로 전달하는 바로 그 정의입니다. 이것은 매우 불쌍한 의미의 경우입니다. 많은 프로그래머가 문제를 겪게 될 것이라고 생각합니다. – Palladium