你说的问题,我前天也在已解决问题中搜索了一回,最终也是搞得很糊涂,帮你UP一下,也关注。
.............
public static void main(String[] args)
{
StringBuffer strB1=new StringBuffer("aaaaaaaaa");
StringBuffer strB2=new StringBuffer("bbbbbbbbb");
swap(strB1,strB2);
System.out.println(strB1);
}
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
StringBuffer strBTemp;
strBTemp=strB1;
strB1=strB2;
strB2=strBTemp;
}
.............
用这个方法输出一定是aaaaaaaa
但是如果用下面这个方式,strB1便会改变,输出会是aaaaaaaOK。(搞不懂,希望多些人关注)
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
strB1.append("OK!");
}
.............
public static void main(String[] args)
{
StringBuffer strB1=new StringBuffer("aaaaaaaaa");
StringBuffer strB2=new StringBuffer("bbbbbbbbb");
swap(strB1,strB2);
System.out.println(strB1);
}
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
StringBuffer strBTemp;
strBTemp=strB1;
strB1=strB2;
strB2=strBTemp;
}
.............
用这个方法输出一定是aaaaaaaa
但是如果用下面这个方式,strB1便会改变,输出会是aaaaaaaOK。(搞不懂,希望多些人关注)
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
strB1.append("OK!");
}
int等类型是传值调用
Object类是传引用的如果需要改变int等基本类型变量的值
可以把这些基本变量生成一个相应的包裹类来传
如int对应的是Integer,你传的时候由相应的int值生成一个Integer类来传输就可以了
param = you value//在这里param和上面括号里面(位置一)的param已经不是同一个了。这个param是一个类似param_1得咚咚,是虚拟机自动转换的,你改变不了你传进来的那个值。所以java号称是传值的,java里面是没有传引用这种说法的。
但是不管是位置一的param还是方法里面的这个param(相当于位置一param副本),他们指向的都是同一块内存空间,所以下面的语句是可行的
param.b = you value//这里b的值是可以被你改变的
}你直接改变值和用append的区别就在这里,2楼的那个兄弟可以仔细想想。
public static void swap(StringBuffer strB1,StringBuffer strB2)
{
StringBuffer strBTemp;
strBTemp=strB1;
strB1=strB2;
strB2=strBTemp;
}
just the object reference pass to the swap,like a point in c and c++,
the strB1 and strB2 only the point point to the object in heap, so,if
you type strB2=strB1,just to say the two point refer to the some place
in heap,so the output of the program is aaaaaaaa
and the second swap use a object reference pass to a submethod,
and use the method of that reference,it is just the oop thinking.so
that is right,cool.
既然java不像c++那样可以传引用, 我觉得传引用是非常好的一项技术,从这点上,java好像输给了c++, 不知道java在这方面有哪些弥补呢?!
if you want to change it(String a String b)public class Pack
{ String a;
String b;
}chage(Pack pack){
pack.a="???";
pack.b="!!!!";
}it's ok