Java参数传递的两种形式

  • 基本类型作为参数传递时,是传递值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的;
  • 对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数;

    1. 搞清楚 基本类型 和 引用类型的不同之处

    1. int num = 10;
    2. String str = "hello";

    值传递和引用传递 - 图1
    如图所示,num是基本类型,值就直接保存在变量中。而str是引用类型,变量中保存的只是实际对象的地址。一般称这种变量为”引用”,引用指向实际对象,实际对象中保存着内容。

    2. 搞清楚赋值运算符(=)的作用

    1. num = 20;
    2. str = "java";

    对于基本类型 num ,赋值运算符会直接改变变量的值,原来的值被覆盖掉。
    对于引用类型 str,赋值运算符会改变引用中所保存的地址,原来的地址被覆盖掉。但是原来的对象不会被改变(重要)。
    值传递和引用传递 - 图2

    1. public static void main(String[] args) {
    2. String a = "A";
    3. System.out.println(a);
    4. changeData(a);
    5. System.out.println(a);
    6. }
    7. private static void changeData(String a) {
    8. a = "B";
    9. System.out.println(a);
    10. }

    A B A

String a = “A”; a 保存的是字符串”A”的地址,比如是 0x122
changeDate(a); 传入的是地址 0x122
a = “B”; (等价于a = new String(“B”)) 此时 a保存的是字符串”B”的地址, 比如是 0x123
字符串不可变性

本质:拷贝栈中的内容传递。