2016-09-09 2 views
-1

정수 유형의 요소 인을 작성하지 않고 정수 유형에 대한 포인터 ()를 갖고 싶습니다.Java - 정수 유형에 대한 포인터

내 원하는 효과는 : 내가하고자하는

Byte x = 5;   // Byte is just an example and WILL NOT work. 
Byte y = x; 
y--; 
System.out.println(x + "," + y); 

인쇄 :

4,4 

나는 그들이 종류의 클래스에 있기 때문에 Byte, Integer, 또는 Double이 작업을 수행 할 수있을 줄 알았는데 원시 변수 인 내부 변수는 할당 된 객체에 대한 참조를 유지하지 않습니다.

+2

제안 된 유형 *은 모두 ** 불변 **입니다. 'AtomicInteger'를 시도하십시오. –

+1

FYI : Java에는 * 포인터 *가 없습니다. Java에서는 * references *라고 부릅니다. – Andreas

+0

@ElliottFrisch이게 내가 찾고있는 것 같아. 나는 문서를보고 나는 정말 이상한 방법을 많이 보았다. 감소하고 예를 들면 ... 그렇게 이상합니다. 어떻게 사용합니까? – Hatefiend

답변

3

프리미티브 래퍼 유형은 변경할 수 없으므로 사용할 수 없습니다. 이 작업을 수행하려면 AtomicInteger을 사용할 수 있습니다. (요청에 따라) 뭔가 같은

AtomicInteger x = new AtomicInteger(5); 
AtomicInteger y = x; 
System.out.println(y.decrementAndGet() + "," + x.get()); 

출력

4,4 

또는, 당신은 동일한 출력에 대한 int[]

같은
int[] x = { 5 }; 
int[] y = x; 
System.out.println(--x[0] + "," + y[0]); 

을 사용할 수 있습니다.

1

나는 AtomicInteger 클래스에 대한 Elliott의 답변에 전적으로 동의하지 않습니다. 그러한 목적으로 개발 된 것이 아닙니다.

는 I가 제안 중

(1) commons-lang 클래스 (같은 MutableInt, MutableDouble)를 고려 :

MutableInt wrapper = new MutableInt(value); 

(2) get/set 대응하여, 클래스 래퍼 원시 형 포장 -ers :

class IntWrapper { private int value; } 

(3)의 배열 프리미티브 제조

int[] wrapper = new int[] { value }; 
+0

Odd, MutableInt를 입력하려고하면 Intellij가 표준 Java 클래스가 거의 존재하는 동안 Intellij가 존재하는 라이브러리를 자동으로 알지 못합니다. 이 라이브러리가 외부 라이브러리입니까? Apache에서 Java.lang으로 보여주는 온라인을 볼 수 있지만 JDK에 있다면 Intellij가 찾는다 고 생각할 수 있습니다. 어쨌든'AtomicInteger '가 개발 된 이유에 대해 자세히 설명 할 수 있습니까? 내가 그것에 대해 더 많이 읽을수록, 그것이 존재하는 이유에 대해 더 혼란스러워집니다. – Hatefiend

+0

Commons-Lang은 Apache 라이브러리입니다. 따라서 다운로드하여 클래스 경로에 포함시켜야합니다. 그럼에도 불구하고 제 3 자 라이브러리이지만 제 3 자 라이브러리는 표준 JDK의 일부가 아닙니다. 어떤 사람들은 그것에 기초하여이 대답을 싫어할 것입니다. – nasukkin

+0

@Hatefiend, 1) [here] (https://mvnrepository.com/artifact/org.apache.commons/commons-lang3/3.4)에서'.jar' 파일을 다운로드 받아 classpath에 포함시켜야합니다. – Andrew

관련 문제