2012-07-03 3 views
0

개체 또는 변수의 주소를 Java의 다른 개체에 저장할 수있는 방법은 무엇입니까? 우리가 C++에서하는 것처럼변수 Java의 참조 (주소) 저장

int a = & b; // b 또한 int입니다

참조 형식 개체를 Java에서 참조로 모든 메서드에 전달하려면 기본적으로이 cuz를 값으로 전달할 수 있습니다.

답변

5

기본적으로 할 수 없습니다. 모두은 Java에서 값으로 전달되며이를 변경할 방법이 없습니다.

가장 가까운 사용자 지정 범용 가변 래퍼 유형을 만들거나 길이가 1 인 배열을 사용하는 것이 가장 좋습니다. 래퍼 방식을 사용하면 수행중인 작업이 훨씬 명확 해지지 만 효율성은 떨어집니다. 원할 경우 AtomicReference<V>을 래퍼 유형으로 사용할 수 있습니다. 단, 사용하려는 경우 을 의미하지만, 그렇지 않은 경우에는 동시성이 걱정됩니다.

프리미티브 유형의 래퍼의 경우 Integer, Long 등 클래스를 사용하거나 각 프리미티브에 개별 래퍼 유형을 쓸 수 있습니다. (역시 후자가 약간 더 효율적일 것입니다.)

근본적으로는 을 사용해보십시오. 필요하지 않은 코드를 설계해야합니다. I 매우은 거의 유용한 기법이 아닙니다. 자신을 매우 자주하고 싶다면 다른 언어로 "생각하고"있을 수 있습니다 ...

+0

요즘 우리는 이러한 참조를 시뮬레이트하기 위해 배열 대신 AtomicReference를 사용하고 있다고 생각합니까? – Bananeweizen

+0

@Bananeweizen : 내가 편집하고있는 동안 당신이 코멘트를하고 있었음에 틀림 없다 :)이 둘 모두는 정말로 관련이 없다는 것을 암시한다. - 내가 AtomicReference를 사용한다면, 나는 보통 어떤 종류의 동시성이 있어야한다고 생각한다. 계속. –

+0

with sun.misc.Unsafe, 당신은 당신의 자바를 가질 수 있고 당신의 C도 먹을 수 있습니다! ;) – sjr

0

Java에서는 주소를 사용할 수 없습니다. 그러한 능력은 단순히 존재하지 않습니다. 모든 것은 가치에 의해 전달됩니다. 당신이 변이되는 물체를 통과 할 때 여러 가지 방법이 있습니다

A) 배열을 전달합니다

int [] valueArray = new int[1]; 
valueArray[0] = <your value>; 

b는) 당신은 자기가 쓰기 갈까요 변경 가능한 래퍼를 전달합니다.

c)는 입력 INT에 합격하여 새 값 retur : 자바를 C++에서 차이를 온다

int a = 5; 
a = sqr(a); 
+0

글쎄, 거기에 일이있다, 일. 미안. 안전하지.하지만 누가 거기 가고 싶어?! :) – sjr

+0

@sjr 개체/프리미티브의 주소를 가져 오기 위해 s.m.U를 사용하는 방법이 표시되지 않습니다. 예? 흥미로운 것 같습니다;) – Voo

+0

http : // javapapers.com/core-java/address-of-a-java-object/흥미로운 읽기를위한 것 – sjr