두 값을 교환하고 싶을 때마다 실제 스왑을하기 위해 임시 사용해야합니다. 왜 Java는 두 클래스의 값을 바꾸기위한 클래스를 제공하지 않는 이유는 무엇입니까?Java가 간단한 스왑 기능을 제공하지 않는 이유는 무엇입니까?
4
A
답변
12
자바는 Pass-by-Value입니다. 그래서 간단 스왑 방법 (ref)을 만들 수 없습니다.
당신은 그러나 다른 개체 내부 귀하의 참조를 포장하고 내부 심판을 교체 할 수 있습니다 : 그것은 수 없기 때문에
public static void main(String[] args) {
Ref<Integer> a = new Ref<Integer>(1);
Ref<Integer> b = new Ref<Integer>(2);
swap(a, b);
System.out.println(a + " " + b); // prints "2 1"
}
public static <T> void swap(Ref<T> a, Ref<T> b) {
T tmp = a.value;
a.value = b.value;
b.value = tmp;
}
static class Ref<T> {
public T value;
public Ref(T t) {
this.value = t;
}
@Override
public String toString() {
return value.toString();
}
}
3
자바는 방법을 제공하지 않습니다. 변수가 값에 의해 메서드에 전달됩니다. 네, 이것들이 객체이더라도 말이죠. 이 경우 객체에 대한 참조를 값으로 전달합니다. 따라서이 변수를받은 메소드 내에서 소스 변수의 값을 매개 변수로 변경할 수 없습니다.
int a = 5;
int b = 6;
swap(a, b);
// a is still 5, b is still 6!
void swap(int first, int second) {
int tmp = first;
first = second;
second = tmp;
}
관련 문제
- 1. Java가 배열을 역전시키는 표준 함수를 제공하지 않는 이유는 무엇입니까?
- 2. MPI가 직렬화 인터페이스를 제공하지 않는 이유는 무엇입니까?
- 3. java가 포인터를 지원하지 않는 이유는 무엇입니까?
- 4. Java가 CopyOnWriteMap과 함께 제공되지 않는 이유는 무엇입니까?
- 5. Silverlight에서 IME 지원을 제공하지 않는 이유는 무엇입니까?
- 6. jQuery가 .firstChild 메소드를 제공하지 않는 이유는 무엇입니까?
- 7. Gdb는 간단한 std :: string 캐치되지 않는 예외에 스택을 제공하지 않습니다.
- 8. Java가 나에게 IllegalArgumentException을주는 이유는 무엇입니까?
- 9. 0.0으로 나누면 Java가 예외를 throw하지 않는 이유는 무엇입니까?
- 10. 6 대신 6을 사용할 때 Java가 시작되지 않는 이유는 무엇입니까?
- 11. Java가 jar 파일의 새 버전을 요청하지 않는 이유는 무엇입니까?
- 12. Java가 Generic에서 내 LinkedList를 허용하지 않는 이유는 무엇입니까?
- 13. F # 코어 라이브러리가 일반 시퀀스 슬라이싱 기능을 제공하지 않는 이유는 무엇입니까?
- 14. Google에서 부분 검색 기능을 제공하지 않는 이유는 무엇입니까? 색인이 너무 커야하기 때문입니까?
- 15. 콘텐츠를 제공하지 않는 Github
- 16. XText에서 제공하지 않는 ANTLR의 기능은 무엇입니까?
- 17. LinkedHashMap에서 인덱스를 통한 액세스를 제공하지 않는 이유는 무엇입니까? 자바 독에서
- 18. localhost : 88/hostinfo.php가 바람직한 결과를 제공하지 않는 이유는 무엇입니까?
- 19. 이 프로그램이 예상되는 출력을 제공하지 않는 이유는 무엇입니까?
- 20. OracleParameter가 ICloneable을 구현하지만 Clone()을 제공하지 않는 이유는 무엇입니까?
- 21. 다음 코드가 원하는 답변을 제공하지 않는 이유는 무엇입니까?
- 22. Controls 컬렉션이 모든 IEnumerable 메서드를 제공하지 않는 이유는 무엇입니까?
- 23. IDS가 RSAM 용 C 라이브러리 함수를 제공하지 않는 이유는 무엇입니까?
- 24. C++ STL이 해시 테이블과 공용 구조체를 제공하지 않는 이유는 무엇입니까?
- 25. 이 셸 명령이 원하는 결과를 제공하지 않는 이유는 무엇입니까?
- 26. Process.StandardInput.WriteLine이 내 프로세스에 입력을 제공하지 않는 이유는 무엇입니까?
- 27. JPA CriteriaQuery가 업데이트 쿼리를 제공하지 않는 이유는 무엇입니까?
- 28. NetUserGetInfo가 사용자에게 홈 디렉토리를 제공하지 않는 이유는 무엇입니까?
- 29. C++ STL이 스레드 안전 컨테이너 집합을 제공하지 않는 이유는 무엇입니까?
- 30. 새 파일 ("")이 기존 디렉토리를 제공하지 않는 이유는 무엇입니까?
그래서 무엇이 문제입니까? 왜 자바는 그걸 위해 무언가가 없었습니까? 자바 제작자에게 물어보십시오. – shift66
http://stackoverflow.com/questions/3624525/how-to-write-a-basic-swap-function-in-java 및 http://stackoverflow.com/questions/2393906/how-do-i- make-my-swap-function-in-java –
@Ademiban은 문법을 수정합니다. – Juvanis