Java值传递和引用传递

187 阅读1分钟

值传递

基本类型的传参,在方法内部是值拷贝,在方法内对这个局部变量的修改不影响原来的参数。

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'}