> Java > java지도 시간 > 본문

Java의 매개변수 전달 방법 샘플 코드 공유

黄舟
풀어 주다: 2017-03-23 10:36:39
원래의
1778명이 탐색했습니다.

이 글은 주로 자바의 매개변수 전달 방식에 대한 자세한 설명을 소개하고 있습니다. 필요한 친구들은

자바의 매개변수 전달 방식에 대한 자세한 설명

을 참고하세요.

java 초보자가 직면하는 고전적인 주제입니다. 이 기사는 Java에 다음과 같은 말이 있습니다. 이 문장을 어떻게 이해해야 할까요? 말로 설명하기가 쉽지 않을 것 같고, 아마 명확하게 이해하기 어려울 것 같습니다.

전제

가치 또는 참조의 개념을 먼저 명확히 하겠습니다. 이는 C++ 언어에서 유래되었으며 참조는 중국어 사전에 있는 단어가 아니라 C++ 개념 - "&" 기호를 기억하시나요?

이 주제는 왜 있는 걸까요? 첫째, 참조별 전달에 대한 이해가 불완전합니다. 둘째, 많은 Java 책과 토론 주장이 제대로 작동하지 않습니다.

한 문장으로 말하면 매개변수를 값으로 전달할 것인지, 참조로 전달할 것인지는 매개변수 전달 방식이기 때문에 형식 매개변수와 실제 매개변수에만 적용되는 얘기다. 매개변수 개체의 하위 개체 또는 손자입니다.

전제를 가지고 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<< "\npass by ref:"<<endl;
 User* t = new User();
 t->setId(1001);
 cout << t->getId() << endl;
 test2(t);
 cout << t->getId() << endl;

 cout<< "\npass 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++ 요약:

값을 전달하면 형식 매개변수가 함수 내에서 수정되어 새 객체를 가리키며 외부 실제 매개변수는 영향을 받지 않습니다.

참조로 전달한 다음 함수 내에서 형식 매개변수가 새 객체를 가리키도록 수정되고 외부 실제 매개변수도 변경됩니다.

문제를 설명하기 위해 코드에 메모리 누수가 있을 수 있습니다.

java 사용:

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++ 사용 논리적 비교해보시고 결정하세요.

위 내용은 Java의 매개변수 전달 방법 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!