2017-01-17 2 views
-3

나는 C 학습 된 지금은 난 단지 스택에 저장 x의 값을 변경 CJava 메소드는 값의 사본을 저장합니까?

void changeVal(int x){ 
    ++x; 
} 

을 할 경우 자바

에 비교하려는 틀. x의 로컬 복사본 만 변경합니다.

그래서

int x = 5; 
public void changeValJava(int x){ 
    ++x; 
} 

자바로 무엇을합니까?

x의 값 또는 x의 값을 변경합니까?

x에 대한 포인터를 사용하여 실제 값을 변경해야하지만 Java에서는 어떨까요?

+3

Java는 값에 의한 패스를 사용합니다. StackOverflow에서 [this] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value) 대답을보십시오. – Kihats

+1

지금까지 8 가지 질문을했습니다. 대부분의 응답을 받았습니다. 그들 모두 * 당신에게 도움이되지 않았습니까? 나는 당신이 돌아가서 어떤 것을 받아들이는 것에 대해 생각해보기를 제안한다. – StoryTeller

+0

시도해 보셨습니까? – chrylis

답변

4

Java에서 ++x;은 인수 x을 변경합니다. 필드 x이고 그림자는입니다. 필드 수정하려면 필드 x 및 변수 x이 (떨어져 같은 이름을 가진)에서 관련이없는 것으로

++this.x; 

주 뭔가를해야합니다.

0

여기서, 제

line 1 int x = 5; 
line 2 public void changeValJava(int x){ 
line 3 ++x; 
     } 

INT 5의 입력 파라미터 값 (x)을 변경하는 것은 원시 변수 및 라인 (2) -에서의 개선은 예로서 언급보다 초기화로 참조. 2 번 줄에서 x 변수는 5로 초기화되고 3 번 변수는 x = x + 1에서와 같이 변수가 6으로 다시 초기화됩니다.

클래스 1의 변수 x는 클래스의 인스턴스 변수를 사용하거나이 키워드를 사용하여 참조하거나 업데이트 할 수 있습니다.

0

C와 마찬가지로 Java는 x의 로컬 값도 저장합니다. 따라서 ++x을 가져 가면 changeValJava으로 전달되는 x의 값을 증가시킵니다. Java에서 'x'은 인스턴스 변수 이고 changeValJava의 x는 로컬 변수입니다. 이 두 개의 x은 다릅니다.

Java는 포인터를 지원하지 않으므로 '실제'값을 변경하려면 x가 들어있는 객체를 연결해야합니다. 여기에 해당 객체는 this 키워드로 참조되는 자체 객체입니다. 따라서 쓸 수 있습니다

++this.x 
0

자바에서는 각 스레드마다 별도의 스택이 있습니다. 모든 메소드와 변수는이 스택에 저장됩니다.

질문이 약간 혼란스러워 보입니다.

을 값으로 전달하고 참조로 전달하는 경우 (C의 포인터).

매우 명확한 Java는 값으로 전달할 때만입니다.

당신이 요청하는 경우, 방법 자바 저장 방법 변수와 해당 개체, 다음 을 "자바에서는 모든 방법, 방법 변수를 저장하고 개체를 각 스레드에 대한 별도의 스택이 있습니다."

+1

C의 각 스레드마다 별도의 스택이 있습니다. – StoryTeller

관련 문제