我感觉就是这样啊
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
byte[] buf0 = new byte[8];
buf0[0] = (byte)0;
buf0[1] = (byte)0;
changeByteArr(buf0);
Person person = new Person();
person.age = 20;
doing(person);
Log.d("MainActivity", ""+person.age);
changeAge(person.age);
Log.d("MainActivity", ""+person.age);
Log.d("MainActivity", ""+(int)buf0[0]);
}
public void changeAge(int age){
age = age * 2;
}
public void doing(Person per){
per.age = 10;
}
public void changeByteArr(byte[] byt){
for(int i = 0;i<byt.length;i++){
byt[i] = (byte)1;
}
}
public class Person {
public String name;
public int age;
}
}
打印的信息非别是10,10,1
------解决思路----------------------
传参的时候只要不是基本数据类型传递的都是地址,数组是一个真正的对象,所以传递的是地址,在方法内部改变数组中的值。外面的数组也会改变。你的程序中changeAge(person.age);只是把一个int传递过去了,和person没有任何关系。但是doing(person);中传递是这个person的引用,在方法体中改变person的age值,也就是person这个应用所指向的person这个实例的age属性中的值被改变了,所以在方法外person.age=10