주소를 저장하여 참조를 구현할 수 있습니다. 일반적으로 Java 참조는 포인터로 구현되지만 사양에는 필요하지 않습니다. 가비지 수집을 쉽게하기 위해 추가 간접 계층을 사용하고있을 수 있습니다. 그러나 결국 (거의 항상) (Java 스타일) 참조 구현에 관여하는 (C 스타일) 포인터로 요약됩니다.
참조를 사용하여 포인터 산술을 수행 할 수 없습니다. C의 포인터와 Java의 참조 사이의 가장 중요한 차이점은 Java에서 참조의 기본 값을 실제로 얻을 수없고 조작 할 수 없다는 것입니다. 즉, 포인터 산술을 수행 할 수 없습니다.
C에서는 포인터 (예 : 주소)에 무언가를 추가하거나 "가까운"것을 가리 키거나 어떤 장소 에 있는 것을 가리킬 수 있습니다 .
Java에서 참조는 한 가지만 지적합니다. 변수에 다른 참조를 붙일 수는 있지만 "원래의 사물 뒤에있는 것"을 가리 키도록 요청할 수는 없습니다.
참조는 강력하게 입력됩니다. 또 다른 차이점은 참조의 유형이된다는 것이다 많은 당신이있을 수 있습니다 포인터의 타입은 C에서 C로보다 더 엄격하게 자바로 제어 int*
하고 그것을 던져 char*
그냥 그 위치에 메모리를 재 해석한다. 이 해석은 Java에서 작동하지 않습니다. 참조의 다른 쪽 끝에있는 객체를 이미 존재 하는 것으로 만 해석 할 수 있습니다 (예 : 객체가 실제로 객체 인 경우에만Object
참조에 String
대한 참조를 캐스트 할 수 있음 ).String
이러한 차이점으로 인해 C 포인터가 더 강력 해지지 만 더 위험 해집니다. 이 두 가지 가능성 (포인터 산술 및 지정된 값을 재 해석)은 C에 유연성을 추가하고 언어의 일부 힘의 원천입니다. 그러나 잘못 사용하면 코드가 작성되었다는 가정을 쉽게 깨뜨릴 수 있기 때문에 문제의 큰 원인 이기도 합니다. 그리고 그것들을 잘못 사용하는 것은 꽤 쉽습니다.