package sun;
public class Tested {
/**
* 这是一个关于参数传递的例子
* @param args
*/
public static void main(String[] args) {
//案例一 int的值传递
int a=9;
System.out.println("before="+a);
change(a);
System.out.println("after="+a);
//案例二 StringBuffer的地址传递
StringBuffer sb=new StringBuffer("StringBuffer");
change1(sb);
System.out.println(sb);
change2(sb);
System.out.println(sb);
//案例三 String的值传递
String s1=new String("String");
//s1+=",hellow";
bian(s1);
System.out.println(s1);
//自定义Person类的地址传递
Person p=new Person("Person");
chuan(p);
System.out.println(p.name);
}
//自定义对象的用法和StringBuffer一样,是地址传递,故输出的结果是:Person,tiantian
private static void chuan(Person p) {
p.name+=",tiantian";
}
//最后的结果是只输出String,但是String是引用类型啊,怎么和基本类型一样是值传递?
//网上看到一句话:Strig用法是基本类型,本身是引用类型
private static void bian(String s1) {
s1+=",hellow";
//System.out.println(s1);
}
/*
* 1 栈中sb的地址拷贝了一份给参数sbS 由于new故他们指向的是不同的堆中的地址
* 2 sbS把值改变后,sb指向的值不会变,故输出的结果中没有welcome
*/
private static void change2(StringBuffer sbS) {
sbS=new StringBuffer();
sbS.append("welcome");
}
/*
* 1 栈中sb的地址拷贝了一份给参数sbS 由于没有new故他们指向的是同一个堆中的地址(sb sbS共同指向了同一个内容)
* 2 sbS把值改变后,sb指向的值也改变了,故输出的结果是StringBuffer,hellow
*/
private static void change1(StringBuffer sbS) {
sbS.append(",hellow");
}
//基本类型的参数传递 是传递值的拷贝,不能改变原来的值,故输出的结果还是9
private static void change(int a) {
a=12;
}
}
class Person{
String name;
Person(String name){
this.name=name;
}
}
java参数传递
最新推荐文章于 2013-08-29 22:00:59 发布