Java中値伝達と参照伝達の原理と違い
2523 ワード
Javaでは、パラメータ転送には2つあります.1つは値転送、1つは参照転送です.
値転送:値転送とは、メソッドを呼び出すときに実際のパラメータをコピーしてメソッドに渡すことです.つまり、メソッドを呼び出すときに、実際のパラメータがその値のコピーを対応する形式パラメータに渡します.(ここでは値に注意)より簡単に言えば、1部のデータを直接コピーして過去に、メモリには2つの等しい基本タイプが存在するはずで、後の方法での操作はすべてこのパラメータ(コピー)を修正し、実際のパラメータの値には影響しませんが、値伝達にも欠点があります.直接コピーなので、そのため、この方式はデータ量が非常に大きい場合、運行効率が自然に低下するため、Javaはデータ量の小さいデータを伝達する際に値伝達であり、例えばJavaの様々な基本タイプ:float、double、intなどのタイプである.
リファレンス伝達:リファレンス伝達は上記の不足を補い、メソッドを呼び出すと、実際のパラメータの参照(パラメータの値ではなくアドレス)が対応する形式パラメータに伝達されます.つまり、リファレンス伝達時に動作するのはソースデータで、メソッド実行では、パラメータと実パラメータの内容が同じで、同じアドレス値を指します.メソッド実行中の参照操作は、Object List 2次元配列Mapなどの実際のオブジェクトに影響します.基本タイプ以外は参照転送です.
May everyone be happy every day and everything go well!
値転送:値転送とは、メソッドを呼び出すときに実際のパラメータをコピーしてメソッドに渡すことです.つまり、メソッドを呼び出すときに、実際のパラメータがその値のコピーを対応する形式パラメータに渡します.(ここでは値に注意)より簡単に言えば、1部のデータを直接コピーして過去に、メモリには2つの等しい基本タイプが存在するはずで、後の方法での操作はすべてこのパラメータ(コピー)を修正し、実際のパラメータの値には影響しませんが、値伝達にも欠点があります.直接コピーなので、そのため、この方式はデータ量が非常に大きい場合、運行効率が自然に低下するため、Javaはデータ量の小さいデータを伝達する際に値伝達であり、例えばJavaの様々な基本タイプ:float、double、intなどのタイプである.
リファレンス伝達:リファレンス伝達は上記の不足を補い、メソッドを呼び出すと、実際のパラメータの参照(パラメータの値ではなくアドレス)が対応する形式パラメータに伝達されます.つまり、リファレンス伝達時に動作するのはソースデータで、メソッド実行では、パラメータと実パラメータの内容が同じで、同じアドレス値を指します.メソッド実行中の参照操作は、Object List 2次元配列Mapなどの実際のオブジェクトに影響します.基本タイプ以外は参照転送です.
//
public class ValuePass {
public static void main(String[] args) {
ValuePass valuePass = new ValuePass();
int param=20;
valuePass.setParam(param);
System.out.println(" "+param);
}
public void setParam(int a) {
a=a+10;
System.out.println(" "+a);
}
public void setValue(IntValue source) {
source.setValue(40);
System.out.println(" "+source.getValue());
}
}
class IntValue{
public int value;
public IntValue(int source) {
value=source;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
:
30
20
// :
public class ValuePass {
public static void main(String[] args) {
User user = new User(" ",18," ");
System.out.println(" "+"==========="+user.getName()+user.getAge()+user.getSex());
setValue(user);
System.out.println(" "+"==========="+user.getName()+user.getAge()+user.getSex());
}
public static void setValue(User user) {
user.setName(" ");
user.setAge(80);
user.setSex(" ");
System.out.println(" "+"==========="+user.getName()+user.getAge()+user.getSex());
}
}
class User{
public String name1;
public int age1;
public String sex1;
public User(String name,int age,String sex) {
name1=name;
age1=age;
sex1=sex;
}
public String getName() {
return name1;
}
public void setName(String name) {
this.name1 = name;
}
public int getAge() {
return age1;
}
public void setAge(int age) {
this.age1 = age;
}
public String getSex() {
return sex1;
}
public void setSex(String sex) {
this.sex1 = sex;
}
}
:
=========== 18
=========== 80
=========== 80
May everyone be happy every day and everything go well!