| English | 의미 |
|---|---|
| NullPointerException/nʌl ˈpɔɪntə ekˈsepʃn/ | NullPointerException |
객체 변형은 파라미터 재 할당과 다릅니다
- 호출자는 점수 10을 가진 Student를 참조합니다. 메서드는 s.addScore(5)를 실행한 후 s = new Student("Other");를 수행합니다.
- 원본 공유 객체의 점수는 15가 됩니다. 로컬 파라미터를 재 할당해도 호출자의 변수에는 영향을 주지 않습니다. 왜냐하면 Java는 참조 값을 파라미터에 복사하기 때문입니다.
메서드에 객체를 전달하기
- Java는 참조 값을 메서드의 매개변수에 복사합니다. 객체 자체를 복사하지 않습니다. 메서드의 매개변수는 호출자의 변수와 동일한 객체를 가리킵니다.
- 따라서 메서드가 객체에 가하는 변경 사항은 호출자에게 보입니다. 기본 데이터类型과 참조 타입 모두 값으로 전달됩니다. 복사된 참조는 여전히 공유된 객체에 도달할 수 있습니다.
기본형 vs. 객체 인자
- 기본 데이터类型 매개변수는 복사되므로, 메서드는 호출자의 변수를 변경할 수 없습니다. 객체 매개변수의 경우, 복사된 참조는 동일한 객체에 도달하므로 메서드는 해당 객체를 변형할 수 있습니다.
changeInt(x)은x을 변경할 수 없습니다;student.addScore(10)는 해당 학생을 변경합니다. 메서드가 공유된 객체를 변형하는지, 아니면 단순히 로컬 매개변수만 재할당하는지를 질문해 보십시오.
객체 반환하기
- 메서드는 객체에 대한 참조를 반환할 수 있습니다—호출자는 이를 공유하게 됩니다.
public Student topStudent() { return best; }은best에 대한 참조를 반환합니다. best을 반환하면 기존 객체를 공유하게 됩니다.与此相反,return new Student("Copy");은 새로운 객체를 생성하고 그 참조를 반환합니다; 메서드는 또한null을 반환할 수 있습니다. 상태가 공유되는지 결정하기 전에 반환 식을 먼저 읽으십시오.
복사된 참조, 공유된 객체; 복사된 원시 값
객체의 score는 변합니다. 원시형 x는 변하지 않습니다.
객체를 메서드에 전달하면 메서드는 ...을 받습니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
Java는 참조 값을 별도의 매개변수 변수에 복사합니다. 두 참조는 같은 객체를 가리킬 수 있으며, 매개변수 재할당은 호출자 변수를 교체하지 않습니다.
메서드는 매개변수를 수정하여 호출자의 int 변수를 변경할 수 있습니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
원시형은 복사됩니다 — 호출자의 int는 변하지 않습니다.
null 참조를 통해 인스턴스 메서드를 호출하면 ...이 발생합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
null 포인트는 어떤 객체도 가리키지 않으므로, 이 메서드를 호출할 대상이 없습니다.
메서드는 객체에 대한 참조를 반환할 수 있으며, 이를 호출한 측에서 공유하게 됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
메서드는 기존 객체의 참조를 반환하여 호출자와 객체를 공유할 수 있습니다. 다른 메서드는 새로운 객체를 생성하여 반환할 수도 있습니다.
null일 가능성이 있는 참조를 안전하게 사용하려면 먼저 확인해야 합니다...
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
메서드를 호출하기 전에 null에 대해 보호조치를 취해야 합니다.
Student 참조를 반환하는 모든 메서드는 Previously 존재하던 객체를 반드시 반환해야 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
거짓: return new Student("Other");는 새 객체를 생성하고 반환합니다.
null 참조
- 어떤 객체도 가리키지 않는 참조는 **
null**입니다. instance 메서드를null을 통해 호출하면 NullPointerException이 발생합니다. null(예: "찾을 수 없음")을 반환하는 것이 일반적이며, 호출자는 이를 확인해야 합니다. 사용 가능한-null 참조를 사용하기 전에if (s != null) { s.addScore(10); }으로 보호하십시오.
객체를 전달하면 참조 값을 복사하므로 메서드는 호출자의 객체를 변경할 수 있으며, 기본 데이터类型을 전달하면 값을 복사하므로 변경할 수 없습니다. 따라서 student.addScore(10)은 호출자의 객체를 변형하지만, changeInt(x)은 호출자의 x을 그대로 둡니다. 그리고 null 참조를 통해 instance 메서드를 호출하면 NullPointerException이 발생하므로, 참조가 null일 수 있을 때는 먼저 != null을 확인하십시오.
After the two statements, what is the original caller-referenced Student score?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
The first statement mutates the original object to 15. The later local reassignment does not replace the caller reference.
메서드가 new Student("Other");를 반환하지만 호출자가 그 결과를 무시합니다. 호출자의 기존 Student 변수에는 어떤 일이会发生합니까?
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
참조를 반환하는 것이 호출자 변수에 할당되는 것은 아닙니다. 기존 변수는 여전히 원래 객체를 가리킵니다.
참조 vs. 값:
void addTen(Student s) { s.addScore(10); }— 전달된 객체를 변경함 (공유 참조).void addTen(int x) { x += 10; }— 호출자의int은 변화하지 않음 (복사 값).- 두 매개변수 값 모두 복사되며, 복사된 참조만 공유된 가변 상태에 도달합니다.
추론을 새로운 사례로 확장하기
return s;과return new Student("Other");을 비교해 보십시오: 첫 번째는 제공된 참조를 반환하고, 두 번째는 새로 constructed 객체를 반환합니다. 호출자가 결과를 할당하기 전까지는 어느 쪽도 호출자의 변수를 변경하지 않습니다.- 변경을 예측하려면, 호출자와 매개변수를 객체를 가리키는 별도의 참조 변수로 그려보십시오. mutator 호출 시 객체를 업데이트하고, 매개변수 재할당 시에는 매개변수 화살표만 업데이트하십시오.
객체 참조를 전달하면 그 값을 매개변수에 복사하므로 메서드는 호출자의 객체를 변경할 수 있습니다; 기본 데이터类型을 전달하면 값을 복사하므로 변경할 수 없습니다. 메서드는 객체에 대한 참조를 반환할 수 있습니다. 어떤 객체도 가리키지 않는 참조는 **null**입니다—이를 통해 instance 메서드를 호출하면 NullPointerException이 발생하므로, 먼저 확인하십시오.