Java에서 프리미티브 교환: 값으로 전달의 한계 해결
Java에서는 매개변수가 값으로 전달되어 프리미티브 교환을 시도합니다. 전통적인 접근 방식을 사용하는 가치는 무익할 수 있습니다. 이를 보여주는 코드 조각을 살펴보겠습니다.
<code class="java">public class SwapPrimitives { public static void swap(int a, int b) { int temp = a; a = b; b = temp; } public static void main(String[] args) { int x = 5; int y = 10; swap(x, y); System.out.println("x: " + x); // Output: 5 System.out.println("y: " + y); // Output: 10 } }</code>
이 코드의 의도는 x와 y의 값을 바꾸는 것이지만 출력에서 볼 수 있듯이 값은 변경되지 않은 상태로 유지됩니다. 이는 Java가 값을 전달하기 때문입니다. 이는 기본 값의 복사본이 생성되어 스왑 함수에 전달된다는 의미입니다. 스왑 기능 내에서 이러한 복사본에 대한 변경 사항은 원래 변수에 영향을 주지 않습니다.
이러한 제한을 극복하고 스왑을 달성하기 위해 Java의 메서드 반환 기능을 활용하는 기술을 사용할 수 있습니다. swap 함수에 return 문을 추가하고 결과를 호출자에게 다시 할당하면 값을 간접적으로 바꿀 수 있습니다.
<code class="java">public static int swap(int a, int b) { // usage: y = swap(x, x=y); return a; } public static void main(String[] args) { int x = 5; int y = 10; y = swap(x, x = y); System.out.println("x: " + x); // Output: 10 System.out.println("y: " + y); // Output: 5 }</code>
이 수정된 코드에서 swap 함수는 a의 값을 반환합니다. 그러나 주요 목적은 호출자가 반환된 값을 첫 번째 인수(이 경우 x)에 다시 할당할 수 있도록 하는 것입니다. 이는 x와 y의 교환을 효과적으로 달성합니다. 이 함수의 사용 패턴은 다소 직관에 반할 수 있지만 Java에서 기본 요소를 교환하기 위한 실행 가능한 솔루션을 제공합니다.
더 일반적인 접근 방식을 원하는 경우 원하는 수의 객체를 교환할 수 있는 메서드를 만들 수 있습니다. 동일한 유형:
<code class="java">public static <T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z); return args[0]; } public static void main(String[] args) { int x = 5; int y = 10; int z = 15; z = swap(x, x = y, y = z); System.out.println("x: " + x); // Output: 15 System.out.println("y: " + y); // Output: 10 System.out.println("z: " + z); // Output: 5 }</code>
이러한 기술을 적용하면 참조 전달이 없더라도 Java에서 프리미티브를 효과적으로 교환할 수 있습니다.
위 내용은 값 전달의 한계가 있는 Java에서 기본 값을 어떻게 바꿀 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!