对象是这样的! 比如 class B{ int age; String name; B(String s,int i){ name=s;age=i; } void setData(String s,int i){ name=s;age=i; } void bOut(){ System.out.println(name+" "+age); } } public class A { public static B c(B s ) { s.setData("牛比",1000); // s.age=100;s.name="牛比"; return s; } public static void main(String[] args){ B testB =new B("zhj",100); B testBtemp; testB.bOut();
调用参数引用是针对对象(实例)而言的!String 比较特殊!public static B c(B s ) { s.setData("牛比",1000); return s; //下面s 的值给了testBtemp,注意!而不是给了testBtemp,我估计你理解错了! }testBtemp=A.c(testB);//return s;s 的值给了testBtemp,注意!
看这一段代码,就明白了。 //Integer.toHexString(s.hashCode())是对象的地址。public class a { public static String c(String s ) { s = "1111"; System.out.println("@s="+Integer.toHexString(s.hashCode())); return s; } public static void main(String[] args){ String a = "123456"; System.out.println("@a="+Integer.toHexString(a.hashCode())); String b = c(a); System.out.println("@b="+Integer.toHexString(b.hashCode())); System.out.println("@a="+Integer.toHexString(a.hashCode())); System.out.println(a); System.out.println("@a="+Integer.toHexString(a.hashCode())); } }
c(a), 由于java是引用传参数, 所以 s = “1111”; 就可以改变a的值, 不是吗?
{};调用 c(a), 改变a 的值 , 如果向大家所说, 好像没办法?
但 String 可不是基本数据哦 :)
其他的就不会有这样的情况了
比如
class B{
int age;
String name; B(String s,int i){
name=s;age=i;
}
void setData(String s,int i){
name=s;age=i;
}
void bOut(){
System.out.println(name+" "+age);
}
}
public class A { public static B c(B s ) {
s.setData("牛比",1000);
// s.age=100;s.name="牛比";
return s;
} public static void main(String[] args){
B testB =new B("zhj",100);
B testBtemp;
testB.bOut();
testBtemp=A.c(testB);//return s;s 的值给了testBtemp,注意!
System.out.println("testB 已被改变!");
testB.bOut();
testBtemp.bOut();
}
}
s.setData("牛比",1000);
return s;
//下面s 的值给了testBtemp,注意!而不是给了testBtemp,我估计你理解错了!
}testBtemp=A.c(testB);//return s;s 的值给了testBtemp,注意!
//Integer.toHexString(s.hashCode())是对象的地址。public class a { public static String c(String s ) {
s = "1111";
System.out.println("@s="+Integer.toHexString(s.hashCode()));
return s;
} public static void main(String[] args){
String a = "123456";
System.out.println("@a="+Integer.toHexString(a.hashCode()));
String b = c(a);
System.out.println("@b="+Integer.toHexString(b.hashCode()));
System.out.println("@a="+Integer.toHexString(a.hashCode()));
System.out.println(a);
System.out.println("@a="+Integer.toHexString(a.hashCode()));
}
}
@a=56760663
@s=170440
@b=170440
@a=56760663
123456
@a=56760663可见a把自己的地址传入c方法,因为是传值,所以a的地址不会发生变化。