按值傳遞和按地址傳遞的區別
用一個小例子來解釋說明:
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後的位數又是一樣的,所以相當於是按值傳參