1. 程式人生 > >按值傳遞和按地址傳遞的區別

按值傳遞和按地址傳遞的區別

用一個小例子來解釋說明:

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後的位數又是一樣的,所以相當於是按值傳參