值传递
基本类型的传参,在方法内部是值拷贝,在方法内对这个局部变量的修改不影响原来的参数。
Java的八种基本类型:byte、short、int、Long、float、double、boolean、char
Java基本类型的包装类:Byte、Short、Integer、Long、Character、Float、Double、Boolean (值传递)
String是特殊的值传递对象
引用传递
对象类型的传参,在方法内部是引用地址的拷贝,对该局部变量的操作,影响的是同一块地址,因此原本的参数也会受影响;但是如果修改局部变量的引用地址,则不会对原本的参数产生影响。
public class JavaTestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java_test);
Integer a = new Integer(140);
Log.e("zhen", "a: " + a );
changeA(a);
Log.e("zhen", "a: " + a );
String b = "bb";
Log.e("zhen", "b: " + b );
changeB(b);
Log.e("zhen", "b: " + b );
Person person = new Person("cc");
Log.e("zhen", "before person: " + person.toString());
changePerson(person);
Log.e("zhen", "after person1: " + person.toString());
changePerson2(person);
Log.e("zhen", "after person2: " + person.toString());
}
private void changeA(Integer a) {
a = 18;
}
private void changeB(String b) {
b = "bb2";
}
private void changePerson(Person person) {
person.setName("cc2");
}
private void changePerson2(Person person) {
Person person2 = new Person("小明");
person = person2;
person.setName(person2.getName());
}
}
日志打印结果
a: 140
a: 140
b: bb
b: bb
before person: Person{name='cc'}
after person1: Person{name='cc2'}
after person2: Person{name='cc2'}