java值传递,引用传递

/*
* 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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值