java 值传递 数组传递

public class Test {
    String str = new String("good");
    char[] ch = {'a','b','c'};
    int i = 10;


    public void change(String str,char[] ch,int i){
        str = "test ok";   //=new String("test ok")
        ch[0] = 'g';
        i++;
    }

    public static void main(String[] args){
        Test tt = new Test();
        System.out.println(tt.i);
        System.out.println(tt.str);
        System.out.println(tt.ch);
        System.out.println("------------");
        tt.change(tt.str,tt.ch,tt.i);
        System.out.println(tt.i);
        System.out.println(tt.str);
        System.out.println(tt.ch);
    }
}


10
good
abc
------------
10
good
gbc   #此处a->g

str是String类型的引用;i是基本类型变量;ch是数组名,也是数组对象的引用
在change()方法里,str="test ok",是一个新的对象把首地址放在引用变量str上;而ch[0]='g';因为传的是数组的引用,而此时ch[0]='g';是对数组元素的操作,能修改源数组的内容;
i是整型值,只是把值copy了一份给方法,在方法的变化是不改变的源i的。
如果将单个基本类型数组的元素传递给方法,并在方法中对 其进行修改,则在被调用方法结束执行时,该元素中存储的并不是修改后的值,因为这种元素是按值传递,如果传递的是数组的引用,则对数组元素的后续修改可以 在原始数组中反映出来

package com.lifeibigdata.algorithms.blog;

/**
 * Created by lifei on 16/6/22.
 */
public class Test {
    String str = new String("good");
    char[] ch = {'a','b','c'};
    int i = 10;


    public void change(String str,char ch,int i){  //change()方法里的入参char[] ch变成--------------char ch
        str = "test ok";
        ch = 'g';
        this.i = i+1;                               //this.i = i+1;这里面等号左边的i是属性i,等号右边的i是局部变量(入参里的i)
    }

    public static void main(String[] args){
        Test tt = new Test();
        System.out.println(tt.i);
        System.out.println(tt.str);
        System.out.println(tt.ch);
        System.out.println("------------");
        tt.change(tt.str,tt.ch[0],tt.i);            //这次传递的是个char值的单个数组元素,按照上面的解析
        System.out.println(tt.i);
        System.out.println(tt.str);
        System.out.println(tt.ch);
    }
}


10
good
abc
------------
11
good
abc

在Java中对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数;这时对象和参数中指向是同一个地址,数据共同变化,如果在这个过程中,如果改变了参数中保存的地址,那么对象和参数不再指向同一个地址,如果此时改变参数中地址指向的值,那么对象中的参数将不会改变

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值