按值传递和按地址传递的区别

用一个小例子来解释说明:

public class Test{

       public static void main(String [] args){

              String str=new String("World");

              char ch[]={'H','e','l','l','o'};

              change(str,ch);

              System.out.print(str+" and ");

              System.out.println (ch);

       }

      

       public static void change(String str,char ch[]){

              str="Change";//按值传递,变化不会带上去

              ch[0]='C';//按地址传递

       }

}

它的结果是world and  cello

就好像是:

String  S1=new String("aaa");

String  S2=new String("aaa");

if(s1=s2){//它们的地址是不一样的,所以肯定是false

 true or false;

}

if(s1.equals(s2)){//这是取值比较,当然是true

 true or false;

}

 

如果把第一个改变为:

 

public class Test {


 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String str=new String("World");
  char ch[]={'H','e','l','l','o'};
  change(str,ch);
  System.out.print(str+" and ");
  System.out.println (ch);


 }
 public static void change(String str,char ch[]){
  str="Change";
  ch=new char[]{'c','e','l','l','o'};
 }


}

 

  change(str,ch);,ch一样是传入的地址,此时的ch的地址是一样的,ch后的位数又是一样的,所以相当于是按值传参

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值