用一个小例子来解释说明:
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后的位数又是一样的,所以相当于是按值传参