java学习笔记:参数传递(2)

java的基本数据类型是按值传递的,其他Object类型的按引用传递的。例子如下:

public   class  Obj  {
    
public String str=null;
}


public   class  TestObj  {

    
public void sum(int x, int y) {
        x 
= 5;
        y 
= 6;
    }


    
public void str(String str) {
        str 
= "world";
    }


    
public void obj1(Obj obj) {
        obj.str 
= "this is another object";
    }


    
public void obj2(Obj obj) {
        obj 
= new Obj();
        obj.str 
= "this is new object";
    }


    
public void strBuffer(StringBuffer s) {
        s.append(
" world");
    }

}



public   class  Test  {
    
public static void main(String[] args) {
        TestObj obj1 
= null;//将引用obj1指向一个null对象
        TestObj obj2 = new TestObj();//将obj2指向一个新的TestObj对象
        obj1 = obj2;//这行代码是将obj2的引用赋值给obj1,使obj1的引用指向obj2的对象
        int x = 1, y = 2;
        System.out.println(
"old x=" + x + " --- y=" + y);
        obj1.sum(x, y);
        System.out.println(
"new x=" + x + " --- y=" + y);
        
//
        String str = "hello";
        System.out.println(
"old str=" + str);
        obj1.str(str);
        System.out.println(
"new str=" + str);
        
//
        StringBuffer s = new StringBuffer("hello");
        System.out.println(s.toString());
        obj1.strBuffer(s);
        System.out.println(s.toString());
        
//3
        Obj o = new Obj();
        o.str 
= "this is old string";
        System.out.println(
"old str=" + o.str);
        obj1.obj1(o);
        System.out.println(
"old str=" + o.str);
        
//4
        o.str = "very well";
        System.out.println(
"old str=" + o.str);
        obj1.obj2(o);
        System.out.println(
"old str=" + o.str);
        
//5
    }

}


 注释1:两次的输出结果是相同的,因为在给sum(int x,int y)方法传参时,仅仅将变量x和y的值作为副本传给形参。所以给sum方法体内的局部变量赋值,影响的仅仅是这两个局部变量,对实参根本没有影响。

注释2:两次的输出结果也是相同的,因为给str(String str)方法传参是传递的实参的引用的副本不是对象本身,为方法体内的对象str赋值,相当于将这个引用指向一个新的对象,str已经不是实参传递过来的那个引用了。所以并不会对实参对象产生影响。

注释3:s是一个StringBuffer对象的引用,调用strBuffer(StringBuffer s)方法,该方法直接对s引用所指向的对象进行了修改。所以结果发生变化。

注释4:该方法修改了Obj对象引用所指向的对象内的成员变量。

注释5:同注释2,传入方法体内的对象的引用已经被指向新对象的引用改变。

输出结果为:

old x=1 --- y=2
new x=1 --- y=2
old str=hello
new str=hello
hello
hello world
old str=this is old string
old str=this is another object
old str=very well
old str=very well
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值