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++의 논리와 비교해 보세요. 스스로 번호를 맞추어 자리에 앉으세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.