java 매개 변수 전달 방식 상세 설명

java 매개 변수 전달 방식 상세 설명
자바 초보자 입문이 직면한 고전적인 화제. 본고는 이 화제를 종결하는 데 목적을 둔다. 자바에서 자바 안의 매개 변수 전달은 모두 값에 따라 전달되는데 이 말을 어떻게 이해합니까?글로 설명하기는 쉽지 않을 것 같고, 분명히 말해도 이해하기 어려울 것 같다.
전제
먼저 명확하게 말하자면, 값에 따라 인용하는 개념은 c++ 언어에서 온 것이다. 인용은 중국어 사전의 한 단어가 아니라 c++의 개념이다. "&"이 기호는 기억하지?
왜 이런 얘기가 나오지?첫째, 인용 전달에 대한 이해가 철저하지 않다.둘째, 많은 자바 서적과 토론 논점이 정곡을 찌르지 않았다.
한 마디로 요약하면 값에 따라 전삼을 하는가, 인용에 따라 전삼을 하는가. 파라미터 전달 방식이라면 형삼과 실삼만을 대상으로 한다. 여기서 말하는 것은 파라미터 자체이지 파라미터 대상의 자대상이나 손자대상이 아니다.
전제가 있습니다. c++ 코드:

#include <iostream>

using namespace std;

class User
{
 private:
  int m_id;
 public:
  User(int id=0){m_id = id;}
  void setId(int id){m_id = id;}
  int getId(){return m_id;}
};

void test0(User t){// 
 User s;
 t = s;
 t.setId(1002);
 cout << "test1:" << t.getId() << endl;
}

void test1(User *t){// 
 t = new User();// , 
 t->setId(1002);
 cout << "test1:" << t->getId() << endl;
}

void test2(User* & t){// 
 t = new User();// , 
 t->setId(1002);
 cout << "test2:" << t->getId() << endl;
}

int main(int argc, char const *argv[]) {
 cout<< "
pass by ref:"<<endl; User* t = new User(); t->setId(1001); cout << t->getId() << endl; test2(t); cout << t->getId() << endl; cout<< "
pass by value:"<<endl; t = new User(); t->setId(1001); cout << t->getId() << endl; test1(t); cout << t->getId() << endl; return 0; }
출력 결과:

pass by ref:
1001
test2:1002
1002

pass by value:
1001
test1:1002
1001

c++ 소결:
값에 따라 전달하면 함수 내에서 형삼이 새로운 대상을 가리키는 것을 수정하고 바깥의 실삼은 영향을 받지 않는다.
인용에 따라 전달하면 함수 내에서 형삼이 새로운 대상을 가리키는 것을 수정하고 바깥의 실삼도 변한다.
문제를 설명하기 위해 코드가 메모리 유출될 수 있습니다.
위의 자바:

package com.pollyduan.bean;

@Data
public class User {
 private Integer id;

 public static void testObject(User t){
  t=new User();// , 
  t.setId(1002);
  System.out.println("testObject="+t);
 }

 @Test
 public void testObject(){
  User user=new User();
  user.setId(1001);
  System.out.println("user="+user);
  testObject(user);
  System.out.println("user="+user);
 }
}

출력 결과:

user=User(id=1001)
testObject=User(id=1002)
user=User(id=1001)
java 매듭:
c++의 논리와 비교해 보세요. 스스로 번호를 맞추어 자리에 앉으세요.

좋은 웹페이지 즐겨찾기