Pass by What ?
이 화제 에 대하 여 나의 한 친구 의 추천 으로 글 한 편 을 보 았 는데,이것 이 야 말로 나 로 하여 금 이 글 을 쓸 생각 을 하 게 하 였 다.이 글 은'Pass-by-Value Please'(Pass-by-Value Please)(http://www.javaranch.com/campfire/StoryPassBy.jsp)가 는 김 에 여러분 께 사 이 트 를 추천 합 니 다.바로...http://www.javaranch.com 아주 좋 은 자바 낙원 입 니 다.
자,본론 으로 돌아 가자~또 멀리 도망 가지 않 게~ㅋ
값 유형 에 대해 서 는 모두 가 잘 알 고 있 을 것 이 라 고 생각 합 니 다.전체적으로 말 하면 Copy the value and give it to you 입 니 다.
다음 코드 를 보십시오.
package blog.nichlas.article.j2se;
import static java.lang.System.out;
public class PassByValue {
public static void testPassValue(){
int a = 2 ;
int b = a ;
out.println("a= " + a ) ;
out.println("b= " + b ) ;
out.println("=============== the value has changed ===============");
a = 3 ; // has change the value of a, but tht value of b is never be changed
out.println("a= " + a ) ;
out.println("b= " + b ) ;
}
public static void main(String [] args){
out.println();
PassByValue.testPassValue();
}
}
결 과 는 다음 과 같다.
a= 2
b= 2
=============== the value has changed ===============
a= 3
b= 2
이 예 는 매우 뚜렷 하 다.너무 많은 설명 을 하지 않 아 도 된다.a 와 b 는 이미 두 개의 독립 적 이 고 상호 보완 적 인 가치 이다.
다음은 인용 유형 에 대한 오늘 의 중점 으로 들 어 갑 니 다.
제 가 처음에 언급 한 그 글 을 참고 하고 싶 습 니 다.그 안에 언급 된 컵,I like the cap,do you?
여기 서 예 를 들 어 우리 컵 에 있 는 참조 Reference 를 유사 하 게 만 들 고 싶 습 니 다.운영 체제 에서 중요 한 개념 이 있 습 니 다.그것 은 바로 프로 세 스 제어 블록 입 니 다.그 는 프로 세 스 실체의 일부분 이 고 운영 체제 에서 가장 중요 한 기록 형 데이터 구조 입 니 다.그 는 운영 체제 에 필요 한 것 을 기록 하 였 습 니 다.프로 세 스 의 현재 상황 과 프로 세 스 실행 을 제어 하 는 모든 정 보 를 설명 합 니 다.인용 도 마찬가지다.다만 이렇게 복잡 하지 않 을 뿐이다.인용 에 자바 object 관련 정 보 를 저장 하여 JVM(Java Virtual Machine)이 더미 에서 대상 을 찾 을 수 있 도록 합 니 다(자바 대상 이 모두 더미 에 있 습 니 다).
우 리 는 이러한 상황 을 하나의 컵 에 프로 세 스 제어 블록 과 유사 한 reference 를 넣 었 다 고 상상 할 수 있 습 니 다.다음은 다음 코드 를 보 겠 습 니 다.
package blog.nichlas.article.j2se;
import static java.lang.System.out;
public class PassByValue {
public static void testPassValue(){
int a = 2 ;
int b = a ;
out.println("a= " + a ) ;
out.println("b= " + b ) ;
out.println("=============== the value has changed ===============");
a = 3 ; // has change the value of a, but tht value of b is never be changed
out.println("a= " + a ) ;
out.println("b= " + b ) ;
}
public static void testPassReference(){
ObjectForTest o1 = new ObjectForTest("Object one");
ObjectForTest o2 = o1;
out.println(o1.getInfo());
out.println(o2.getInfo());
out.println("=============== the value has changed ===============");
o1 = new ObjectForTest("Object two");
out.println(o1.getInfo());
out.println(o2.getInfo());
}
public static void main(String [] args){
out.println();
PassByValue.testPassValue();
out.println();
PassByValue.testPassReference();
}
}
class ObjectForTest{
String info ;
public ObjectForTest(){
info = "default";
}
public ObjectForTest(String initInfo){
info = initInfo ;
}
public String getInfo(){
return info;
}
public void setInfo(String changeInfo){
info = changeInfo;
}
}
실행 결 과 는:
a= 2
b= 2
=============== the value has changed ===============
a= 3
b= 2
Object one
Object one
=============== the value has changed ===============
Object two
Object one
여기 서 이른바 Reference 는 사실 값 유형 과 매우 비슷 하 다 는 것 을 뚜렷하게 나 타 낼 수 있 기 때문에 우 리 는 Reference 에'인용 값'이라는 이름 을 지어 줄 수 있다.
여 기 는 o1 의 인용 치 를 o2 에 복사 한 것 입 니 다.
그러나 여기 서 주의해 야 할 것 은 인용 값 의 복사 이지 만 그들 은 같은 대상 을 인용 하여 모든 대상 에 대한 변 화 는 다른 인용 에 나타 날 수 있다 는 것 이다.
다음 과 같은 예 를 보십시오.
package blog.nichlas.article.j2se;
import static java.lang.System.out;
public class PassByValue {
public static void testPassValue(){
int a = 2 ;
int b = a ;
out.println("a= " + a ) ;
out.println("b= " + b ) ;
out.println("=============== the value has changed ===============");
a = 3 ; // has change the value of a, but tht value of b is never be changed
out.println("a= " + a ) ;
out.println("b= " + b ) ;
}
public static void testPassReference(){
ObjectForTest o1 = new ObjectForTest("Object one");
ObjectForTest o2 = o1;
out.println(o1.getInfo());
out.println(o2.getInfo());
out.println("=============== the value has changed ===============");
o1 = new ObjectForTest("Object two");
out.println(o1.getInfo());
out.println(o2.getInfo());
}
public static void testChangeObject(){
ObjectForTest o1 = new ObjectForTest("Object one");
ObjectForTest o2 = o1;
out.println(o1.getInfo());
out.println(o2.getInfo());
out.println("=============== the value has changed ===============");
o1.setInfo("Object Value changed!");
out.println(o1.getInfo());
out.println(o2.getInfo());
}
public static void main(String [] args){
out.println();
PassByValue.testPassValue();
out.println();
PassByValue.testPassReference();
out.println();
PassByValue.testChangeObject();
}
}
class ObjectForTest{
String info ;
public ObjectForTest(){
info = "default";
}
public ObjectForTest(String initInfo){
info = initInfo ;
}
public String getInfo(){
return info;
}
public void setInfo(String changeInfo){
info = changeInfo;
}
}
결 과 는 다음 과 같다.
a= 2
b= 2
=============== the value has changed ===============
a= 3
b= 2
Object one
Object one
=============== the value has changed ===============
Object two
Object one
Object one
Object one
=============== the value has changed ===============
Object Value changed
Object Value changed
여기 서 볼 수 있 듯 이 o1 대상 의 변 화 는 o2 에 나타 나 고 o2 에 대한 호출 을 통 해 알 수 있다.
이상 은 제 가 이 문제 에 대한 생각 입 니 다.여러분 이 좀 도와 주 셨 으 면 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 문자열 풀우리는 Java에서 문자열이 힙 메모리 영역에 저장된다는 것을 알고 있습니다. 이 힙 메모리 내부에는 String Pool이라는 특정 메모리 영역이 있습니다. 문자열 프리미티브를 생성하면 자바 문자열의 불변성 덕분에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.