매개 변수를 메서드에 전달할 때 두 언어 모두 값별로 전달된다는 것을 알고 있습니다. 그러나 C#은 기본 유형의 참조로 전달할 ref
및 out
키워드를 지원합니다. 자바에서 동일한 키워드와 기술을 찾고 있습니까?Java에서 C#의 참조 및 출력
내 생각을 전달하기 위해 자바 Integer
래퍼 클래스 대신 int
을 사용하고 있습니다.
어떤 제안 및 예제를?
매개 변수를 메서드에 전달할 때 두 언어 모두 값별로 전달된다는 것을 알고 있습니다. 그러나 C#은 기본 유형의 참조로 전달할 ref
및 out
키워드를 지원합니다. 자바에서 동일한 키워드와 기술을 찾고 있습니까?Java에서 C#의 참조 및 출력
내 생각을 전달하기 위해 자바 Integer
래퍼 클래스 대신 int
을 사용하고 있습니다.
어떤 제안 및 예제를?
당신의 추측이 정확 변경된 모든 값을 반환하는 것입니다. 래퍼가 필요합니다 (Integer는 불변이므로).
어떤 사람들은이 목적을 위해 단일 요소 배열을 사용
int[] x = { 0 };
int[] y = { 0 };
someMethod(x, y);
return x[0] + y[0];
많은 GOTO로 바로가 그 기술을 평가합니다.
SomeMethodResult result = someMethod(x, y);
return result.getX() + result.getY();
일부는 작업을 준비 할이 필요성을 피하는 방법 내부에서 수행되는 :
public class Holder<T> {
private T _value;
private Holder(T value) { _value = value; }
public static of(T value) { return new Holder<T>(value); }
public T getValue() { return _value; }
public void setValue(T value) { _value = value; }
}
...
Holder<String> x = Holder.of("123");
Holder<String> y = Holder.of("456");
someMethod(x, y);
return x.getValue() + y.getValue();
일부는 특수 제작 유형을 정의 :
어떤 사람들은 일반적인 홀더 클래스를 정의 by-reference argument for first place :
return someMethod(x, y);
이러한 각각의 기술 s에는 장단점이 있습니다.
개인적으로 나는 자바가 엉망이라고 생각합니다. 차라리 by-reference 인수를 피할 것이지만 Java에서 메소드의 여러 반환 값을 허용하기를 바랍니다. 하지만, 사실, 나는이 여행을 매우 자주하지 않습니다. 나는이 특징을 위해 신장을주지 않을 것이다. :)
Java는 참조로 원시 유형을 전달하는 것을 지원하지 않습니다.
을 Integer
으로 감싸는 것은 변경 불가능한 유형이므로 (즉, 한 번만 변경할 수 있음) 도움이되지 않습니다.
Java에는이 기본 제공이 없습니다. Integer
은 변경할 수 없으므로 수행하지 않습니다. 상태를 변경할 수 없습니다.
직접 변경할 수있는 래퍼 클래스를 만들어야합니다. 그러나 이것은 매우 위험하며 예기치 않은 결과를 초래할 수 있으므로 피해야합니다.
자바는이 기능 여기
이 그나마 그들이
수있는 유일한 방법이 아닌 순수한 OOP 언어 자바를 부르는 이유
http://www.harding.edu/fmccown/java_csharp_comparison.html
그게 전부가 통과하는 C#을 비교 대 자바에 대한 링크입니다 값은 다시 변경 가능 값에 대한 참조를 전달하는 것입니다.
public void calc(int[] value) { value[0] = 1; }
public void calc(AtomicInteger value) { value.set(1); }
그러나 할 수있는 간단한 일이
public int calc() { return 1; }
나는'int []'기법을 좋아한다. 나는 그것을 시도하고 멋지게 일했습니다. 감사. – Tarik
+1 포괄적 인 대답과 나는 거의 마지막 단락에 동의한다. – BoltClock
IMO'int []'는 못 생겼지 만''goto' -level ''근처에 없다. 그것은 언어 기능 (실제 패스 - 바이 - 레퍼런스)의 부족을 가장 간단한 방식으로 해킹하고 있습니다. 이것은 C에서 "포인터를 지나쳐서"와 거의 똑같이 만듭니다. 우리는 자바에서 자주 이것을 필요로하지 않습니다. C에서와 마찬가지지만, 기본적으로 두 언어가 메모리 관리를 다루는 방식과보다 개념적인 수준에서 "객체 관리"를 다루는 방식 때문입니다. –