/*
* java值传递,引用传递
*
* 个人简单理解:值传传递的是变量的值,后续操作与该变量无关;
* 引用传递传递的是对象的地址,后续操作改变的是地址空间对应的内容,所有指向该地址的对象会同时被修改
*
* @author lyf
*
* 2017-2-13 下午02:25:02
*/
public class Yy {
/**
* 对象,引用传递
*/
public void testObjectYy(){
StringBuffer s = new StringBuffer("objetc 1");
StringBuffer s2 = new StringBuffer();
s2 = s;
s2.append("append new BUffer;");
System.out.println("s=="+s);
System.out.println("s2=="+s2);
testObjectCSYy(s);
System.out.println("参数传递后=="+s);
/*result:引用传递
* s==objetc 1append new BUffer;
s2==objetc 1append new BUffer;
参数传递后==objetc 1append new BUffer;append new BUffer;*/
}
public void testObjectCSYy(StringBuffer s){
s.append("append new BUffer;");
System.out.println("s=="+s);//result:s==objetc 1append new BUffer;append new BUffer;
}
/**
* String 对象 值传递 (String具有不可改变行,每一次修改都是创建新的对象)
*/
public void testBlYy(){
String str="str";
String str2 = str;//将str的引用传递给str2,现在str和str2指向同一个地址
System.out.println("str==str2:"+(str==str2));//str==str2:true
str2 = str2+"2";//string 不可改变,每一次修改都是重新创建对象并不修改原对象,现在str2有了新的指向
System.out.println("str=="+str);//str值不变
System.out.println("str2=="+str2);
testStringCsyy(str);
System.out.println("参数引用后str=="+str);
/**
* result:值传递
*
str==str2:true
str==str
str2==str2
参数引用后str==str
*/
}
public void testStringCsyy(String s){
s="s3";
}
/**
* 基本数据类型,值传递
*/
public void testjbsjlxYy(){
int s=0;
int s2 =s;
s2+=1;
System.out.println("s=="+s);
System.out.println("s2=="+s2);
boolean tab = false;
boolean tag = true;
tag = tab;
System.out.println("tab==="+tab);
System.out.println("tag==="+tag);
testJbsjlxCsyy(s,tag);
System.out.println("参数引用后s=="+s);//值传递
System.out.println("参数引用后tag==="+tab);
/**
* result:值传递
* s==0
s2==1
c==c
c2==c
tab===false
tag===false
参数引用后s==0
参数引用后c==c
参数引用后tag===false
*/
}
public void testJbsjlxCsyy(int s,boolean tag){
s+=1;
tag = true;
}
public static void main(String args[]){
Yy y = new Yy();
y.testObjectYy();
y.testBlYy();
y.testjbsjlxYy();
}
}