문제

무엇을 의미하는'값을 의미',그리고 무엇을 의미하는'암시적 포인터를 의미'?

도움이 되었습니까?

해결책

Java는 객체 유형에 대한 암시 적 포인터 시맨틱과 프리미티브에 대한 가치 의미를 사용하고 있습니다.

가치 의미론 란 값을 직접 처리하고 사본을 전달한다는 것을 의미합니다. 여기서 요점은 가치가있을 때 등 뒤에서 바뀌지 않을 것이라고 믿을 수 있다는 것입니다.

포인터 시맨틱을 사용하면 가치가없고 '주소'가 있습니다. 다른 사람이 거기에 무엇이 있는지 바꿀 수 있습니다.

C ++의 포인터 의미론 :

void foo(Bar * b) ...
... b->bar() ...

포인터 시맨틱을 요청하고 포인트에서 방법을 호출하려면 * *가 필요합니다.

자바의 암시 적 포인터 의미 :

void foo(Bar b) ...
... b.bar() ...

가치 의미를 사용하는 선택이 없기 때문에 *는 필요하지 않습니다.

다른 팁

기본적으로 값을 의미는 것을 의미 할당 값을 다른 값 복사본을 만들:

int x = 1;
int y = x;
x = 2; // y remains the same!

특별한 케이스가 함수 호출되는 통과 인수:

void f(int x) {
    x = 5;
}

int a = 1;
f(a);
// a is still 1

이것은 실제로 동일한 Java and C++.그러나 자바를 알고있는 몇 가지 기본 형식,그 중 int, double, booleanchar, 와 함께 열거되는 행동을 이런 식으로 구성됩니다.모든 다른 형식을 사용하여 의미를 참조하는 것을 의미하는 과제 중 하나의 값을 다른 값은 실제로 리디렉션 포인터를 대신에 복사하는 기본값:

class Foo {
    int x;

    public Foo(int x) { this.x = x; }
}

Foo a = new Foo(42);
Foo b = a; // b and a share the same instance!
a.x = 32;
//b.x is now also changed.

거기에 몇 가지 주의 사항이 그러나입니다.예를 들어,많은 참조 형식(String, Integer ...)은 실제로 immutables.자신의 값을 변경할 수 없습니다 및 모든 할당하여 그들에게 재정의 오래된 값입니다.

또한,인수 여전히 값으로 전달됩니다.이것이 의미하는 개체의 값을 전달하는 기능이 변경 될 수 있습니다하지만 대한 참조를 할 수 없습니다:

void f(Foo foo) {
    foo.x = 42;
}

void g(Foo foo) {
    foo = new Foo(42);
}

Foo a = new Foo(23);
f(a);
// a.x is now 42!

Foo b = new Foo(1);
g(b);
// b remains unchanged!

Java는 합격 가치로 가치가 있습니다. C ++는 가치 및 기준 의미를 모두 사용할 수 있습니다.

http://javadude.com/articles/passbyvalue.htm

Java는 사용합니다 implicit pointer semantics ~에 가변 액세스 (참조를 직접 편집 할 수없고, Access의 객체로 자동으로 (암시 적으로) 해결됨) 또한 사용합니다. Pass-by-Value semantics ~에 통과 방법 매개 변수.

읽다 Java 응용 프로그램의 패스 별 의미:

Java 응용 프로그램에서 객체 참조가 메소드의 매개 변수 인 경우 참조 자체가 아닌 참조 사본 (Pass By Value)을 전달합니다. 호출 메소드의 객체 참조 및 사본은 동일한 객체를 가리키고 있습니다. 이것은 중요한 차이점입니다. Java 응용 프로그램은 C ++와 같은 다양한 유형의 매개 변수를 전달할 때 다르게 수행하지 않습니다. Java 응용 프로그램은 모든 매개 변수를 값별로 전달하므로 유형에 관계없이 모든 매개 변수의 사본을 만듭니다.

짧은 : Java의 모든 매개 변수는 값으로 전달됩니다. 그러나 이것이 객체가 복사 된 것을 의미하지는 않지만 (PHP4의 기본값과 같이) 해당 객체에 대한 참조가 복사됩니다.

모든 설명과 심도있는 예제가 표시됩니다 Java 응용 프로그램의 패스 별 의미

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top