(1).String

//    基本数据类型->值传递(传递值)
//    引用数据类型->引用传递(传递地址)
//    特殊的引用传递String:因为是定长字符串,所以结果同值传递

public class TestString {
    static void change(String a, StringBuffer b) {
        a = "改变定长";
        //b.append("改变变长");
        b.replace(0, b.length(), "改变变长");
        System.out.println(a);
        System.out.println(b);
    }

    public static void main(String[] args) {
        String a = new String("定长");
        StringBuffer b = new StringBuffer("变长");
        System.out.println(a);
        System.out.println(b);

        change(a, b);
        System.out.println(a);
        System.out.println(b);

/*
运行结果
定长
变长

改变定长
改变变长

定长
改变变长
 */
    }
}


 

(2).交换对象
public class valuePKreference {

    int a, b;

    static void change(valuePKreference v1, valuePKreference v2) {
        v1.a++;
        v2.a++;
        valuePKreference v3;
        v3 = v1;
        v1 = v2;
        v2 = v3;

        System.out.println("chang里面");
        System.out.println("v1.a=" + v1.a);
        System.out.println("v1.b=" + v1.b);
        System.out.println("v2.a=" + v2.a);
        System.out.println("v2.b=" + v2.b);
        System.out.println("v3.a=" + v3.a);
        System.out.println("v3.b=" + v3.b);
    }

    public static void main(String[] args) {
        valuePKreference v1 = new valuePKreference();
        v1.a = 1;
        v1.b = 1;
        valuePKreference v2 = new valuePKreference();
        v2.a = 10;
        v2.b = 10;
        System.out.println("chang之前");
        System.out.println("v1.a=" + v1.a);
        System.out.println("v1.b=" + v1.b);
        System.out.println("v2.a=" + v2.a);
        System.out.println("v2.b=" + v2.b);
        change(v1, v2);
        System.out.println("chang之后");
        System.out.println("v1.a=" + v1.a);
        System.out.println("v1.b=" + v1.b);
        System.out.println("v2.a=" + v2.a);
        System.out.println("v2.b=" + v2.b);
    }
}
/*
 chang之前
v1.a=1
v1.b=1
v2.a=10
v2.b=10
chang里面
v1.a=11
v1.b=10
v2.a=2
v2.b=1
v3.a=2
v3.b=1
chang之后
v1.a=2
v1.b=1
v2.a=11
v2.b=10
 */

说明:

1.引用传递,所以change后a会增加

2.交换时交换的是新建的v1,,v2,v3所以能看见值的变化,但是源数据没有变化,即只交换了新建对象的指针指向,没有交换指向的数据