'가치 의미론'은 무엇을 의미하며 '암시 적 포인터 의미론'은 무엇을 의미합니까?'값 의미론'과 '포인터 의미론'은 무엇을 의미합니까?
답변
Java는 객체 유형에 대한 암시 적 포인터 의미 체계와 프리미티브에 대한 값 의미를 사용합니다.
값 의미 란 값을 직접 처리하고 사본을 전달한다는 의미입니다. 여기에 요점은 가치가있을 때 뒤에서 바뀌지 않을 것이라는 것을 믿을 수 있다는 것입니다.
포인터 의미론을 사용하면 값이 없으며 '주소'를 갖게됩니다. 다른 사람이 그곳에있는 것을 변경할 수 있습니다. 알 수 없습니다. C++에서
포인터 의미는 :
void foo(Bar * b) ...
... b->bar() ...
당신은 포인터의 의미를 요청하는 *이 필요 ->는 pointee에 메소드를 호출 할 수 있습니다. 자바
암시 포인터 의미 :. 사이
void foo(Bar b) ...
... b.bar() ...
당신이 값 의미를 사용하는 선택의 여지가 없기 때문에
의 * 필요하지 않습니다 구별도 ->하고, 따라서 암시.자바 (당신이 직접 인 타이틀 (암시, 참조를 편집 할 수 없습니다) 액세스에 개체로 확인됩니다) 변수 액세스에 implicit pointer semantics
을 사용하고 또한 메소드 매개 변수가 전달에 Pass-by-Value semantics
를 사용합니다.
읽기 Pass-by-value semantics in Java applications : 객체 참조가 메서드에 매개 변수가
Java 응용 프로그램에서, 당신은 기준의 사본을 전달하는 (값 통과)가 아닌 참조 자체 . 호출 메서드의 개체 참조 및 복사 동일한 개체를 가리키는 것을 유의하십시오. 이것은 중요한 구별입니다. Java 응용 프로그램은 과 같이 다양한 유형의 매개 변수 을 전달할 때 다름없이 아무것도 수행하지 않습니다. Java 응용 프로그램은 모든 매개 변수를 값으로 전달하므로 형식에 관계없이 모든 매개 변수의 복사본을 개로 만듭니다.
약식 : Java의 모든 매개 변수는 값으로 전달됩니다. 그렇다고해서 PHP4에서 기본값처럼 Object가 복사되는 것은 아니지만 해당 객체에 대한 참조가 복사됩니다.
int x = 1;
int y = x;
x = 2; // y remains the same!
특별한 경우는 함수 호출은 다음과 같습니다 당신은 기본적으로 Pass-by-value semantics in Java applications
에 대한 모든 설명과 심도있는 예를 볼 수 있습니다
는 값의 의미는 다른 하나 개의 값을 할당하는 복사본을 생성한다는 것을 의미 이 인수는 인수를 전달받습니다.
void f(int x) {
x = 5;
}
int a = 1;
f(a);
// a is still 1
이것은 실제로 Java와 C++에서 동일합니다. 그러나 Java는 int
, double
, boolean
및 char
중 소수 유형 만이 방식으로 작동하는 열거 형과 함께 알 수 있습니다. 다른 모든 종류의 다른 하나 개의 값의 할당이 실제로 대신 기본 값을 복사하는 포인터를 리디렉션 즉 참조 시멘틱스를 사용 : 몇 가지주의 그러나이있다
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
...)은 실제로 변경되지 않습니다. 그것들의 값은 변경할 수 없으며 그것들에 대한 어떠한 할당도 이전 값보다 우선합니다.
또한 인수는 여전히 값으로 전달됩니다. 즉, 함수에 전달 된 객체의 값은 변경할 수 있지만 참조는 다음과 같을 수 없습니다.
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++은 값 및 참조 의미를 모두 사용할 수 있습니다.
자바의 숨겨진 포인터로 인해 설명이 잘못되었다. (포인터 자체가 지나쳤다 고해도). 값.) – finnw
@ finnw : 그렇지만 Java 개발자는 함수 안에서 뾰족한 데이터를 변경하기를 원한다면 외부의 원래 "참조"가 변경되지 않았기 때문에 놀라지 않을 수 없으므로 Java 개발자는이를 이해해야합니다. 이것은 그들의 "참조"가 복사되는 것을 이해하는 것이 중요합니다. – paercebal
Bartosz : 내 기사를 퍼뜨리는 사람들을 만나서 반갑습니다.) finnw : "숨김"은 핵심 단어가 있습니다 ... 우리는 Java에서 누군가 프로그램하는 방법에 대해 이야기합니다. 장면의 배후에있는 구현 메커니즘은 Java가 엄격하게 가치가 있다는 사실을 바꾸지 않습니다. Java 언어 스펙을 읽어 철자를 확인하십시오. 아웃. –
- 1. Go 객체의 포인터 값을 어떻게 인쇄합니까? 포인터 값은 무엇을 의미합니까?
- 2. Java에서 배열의 컨텍스트에서 포인터 배가는 무엇을 의미합니까?
- 3. nm 명령의 "기호 값"은 무엇을 의미합니까?
- 4. 무엇을 의미합니까?
- 5. "@ + id"는 무엇을 의미합니까?
- 6. SQL에서 '?'는 무엇을 의미합니까?
- 7. 이것은 무엇을 의미합니까? 초기화는 포인터 대상 유형에서 한정자를 무시합니다.
- 8. 이 배열 코드는 무엇을 의미합니까?
- 9. 이것은 무엇을 의미합니까?
- 10. 단위 테스트는 무엇을 의미합니까?
- 11. 벡터화 란 무엇을 의미합니까?
- 12. JSON에서 .d는 무엇을 의미합니까?
- 13. 이 오류는 무엇을 의미합니까?
- 14. "벌크로드"란 무엇을 의미합니까?
- 15. pty와 tty는 무엇을 의미합니까?
- 16. HyperLink에서 EnableViewState는 무엇을 의미합니까?
- 17. 이 오류는 무엇을 의미합니까?
- 18. ACM은 무엇을 의미합니까?
- 19. BatchUpdateException은 무엇을 의미합니까?
- 20. "_"은 무엇을 의미합니까?
- 21. 비동기 ORM은 무엇을 의미합니까
- 22. 힘내 - 무엇을 의미합니까 -m
- 23. "->"PHP에서 무엇을 의미합니까?
- 24. php.ini에서 이것은 무엇을 의미합니까?
- 25. 이벤트 란 무엇을 의미합니까?
- 26. 이 코드는 무엇을 의미합니까?
- 27. 이것은 무엇을 의미합니까 $();
- 28. 언어가 '해석되는'것은 무엇을 의미합니까?
- 29. JSONP의 'P'는 무엇을 의미합니까?
- 30. JS $는 무엇을 의미합니까?
왜 특별한 경우입니까? – morbidCode
@morbidCode 특별한 경우가 무엇입니까? 인수 합격? 실제로 특별한 경우는 아니며, 할당과 동일하게 동작합니다 (구문 적으로 할당 *이 아닙니다). –
나는 그것을 가지고 있는지 잘 모르겠다. f (x)에 a를 전달하면 a의 복사본이 만들어지고 그 복사본은 값 5로 지정되므로 메서드가 복사본을 반환하고 원본 A의 값이 그대로 유지됩니까? – morbidCode