【java学习笔记02】特殊的“值的传递”
(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所以能看见值的变化,但是源数据没有变化,即只交换了新建对象的指针指向,没有交换指向的数据