C ++에서 함수에 대한 참조 인수는 함수가 참조가 다른 것을 참조하도록합니다.
int replacement = 23;
void changeNumberReference(int& reference) {
reference = replacement;
}
int main() {
int i = 1;
std::cout << "i=" << i << "\n"; // i = 1;
changeNumberReference(i);
std::cout << "i=" << i << "\n"; // i = 23;
}
마찬가지로 함수에 대한 상수 참조 인수는 참조를 변경하려고하면 컴파일 타임 오류를 발생시킵니다.
void changeNumberReference(const int& reference) {
reference = replacement; // compile-time error: assignment of read-only reference 'reference'
}
이제 Java를 사용하면 문서는 기본이 아닌 유형의 함수 인수가 참조라고 말합니다. 공식 문서의 예 :
public void moveCircle(Circle circle, int deltaX, int deltaY) {
// code to move origin of circle to x+deltaX, y+deltaY
circle.setX(circle.getX() + deltaX);
circle.setY(circle.getY() + deltaY);
// code to assign a new reference to circle
circle = new Circle(0, 0);
}
그런 다음 circle에 x = y = 0 인 새 Circle 객체에 대한 참조가 할당됩니다. 그러나이 재 할당에는 참조가 값으로 전달되어 변경할 수 없기 때문에 영구성이 없습니다.
나에게 이것은 C ++ 참조처럼 보이지 않습니다. 다른 것을 참조 할 수 없기 때문에 일반 C ++ 참조와 유사하지 않으며 Java에서는 참조가 변경되지만 실제로는 그렇지 않은 코드가 컴파일되지 않기 때문에 C ++ const 참조와 유사하지 않습니다. 시간 오류.
이것은 C ++ 포인터와 동작이 더 비슷합니다. 이를 사용하여 뾰족한 객체 값을 변경할 수 있지만 함수에서 포인터 값 자체를 변경할 수는 없습니다. 또한 C ++ 포인터 (C ++ 참조는 아님)와 마찬가지로 Java에서는 이러한 인수의 값으로 "null"을 전달할 수 있습니다.
그래서 제 질문은 : Java가 왜 "참조"라는 개념을 사용합니까? 그것들이 C ++ 참조와 유사하지 않다는 것을 이해해야합니까? 아니면 실제로 실제로 C ++ 참조와 비슷하며 뭔가 빠졌습니다.