当前位置: 技术问答>java相关
关于拷贝还是引用的概念题。
来源: 互联网 发布时间:2015-07-20
本文导语: package Mytest; import java.io.*; public class ALGore { public static void recount(StringBuffer s3, StringBuffer s4) { s4.append("more"); s3=s4; } public static void main(String[] args) { StringBuffer s1...
package Mytest;
import java.io.*;
public class ALGore
{
public static void recount(StringBuffer s3, StringBuffer s4)
{
s4.append("more");
s3=s4;
}
public static void main(String[] args)
{
StringBuffer s1=new StringBuffer("s1");
StringBuffer s2=new StringBuffer("s2");
ALGore.recount(s1,s2);
System.out.println("s1 is "+s1);
System.out.println("s2 is "+s2);
}
}
输出:
s1 is s1
s2 is s2more
疑问:
public static void recount(StringBuffer s3, StringBuffer s4)中,如果传递的是引用,s3=s4就应该影响s1,输出是s1 is s1more s2 is s2more;如果是传递的是拷贝,s4.append("more")就应该不影响s2,输出是s1 is s1 s2 is s2,现在输出的是s1 is s1 s2 is s2more 如何解释?
import java.io.*;
public class ALGore
{
public static void recount(StringBuffer s3, StringBuffer s4)
{
s4.append("more");
s3=s4;
}
public static void main(String[] args)
{
StringBuffer s1=new StringBuffer("s1");
StringBuffer s2=new StringBuffer("s2");
ALGore.recount(s1,s2);
System.out.println("s1 is "+s1);
System.out.println("s2 is "+s2);
}
}
输出:
s1 is s1
s2 is s2more
疑问:
public static void recount(StringBuffer s3, StringBuffer s4)中,如果传递的是引用,s3=s4就应该影响s1,输出是s1 is s1more s2 is s2more;如果是传递的是拷贝,s4.append("more")就应该不影响s2,输出是s1 is s1 s2 is s2,现在输出的是s1 is s1 s2 is s2more 如何解释?
|
s2传递给s4,所以改变了s2所指的对象值。
s1传递给s3,但是改变的引用,所以回传s1的时候还是原来的引用,其所指的
对象没有改变!
s1传递给s3,但是改变的引用,所以回传s1的时候还是原来的引用,其所指的
对象没有改变!
|
所以输出s1,s2的值时s1='s1',s2='s2more'
|
public static void recount(StringBuffer s3, StringBuffer s4)中,如果传递的是引用,s3=s4就应该影响s1,输出是s1 is s1more s2 is s2more;如果是传递的是拷贝,s4.append("more")就应该不影响s2,输出是s1 is s1 s2 is s2,现在输出的是s1 is s1 s2 is s2more 如何解释?
/********************************************************/
1.首先应该肯定:变元传递的是引用(因为变元的类型为对象。);
2.recount方法中有:s3=s4;//它其实并不影响s1.
在main方法中调用recount方法时,情况是这样的:先将s1的指针赋给s3;将s2的指针赋给s4.即s3与s1指向同一个对象,s4与s2指向同一个对象,当程序执行s3=s4时:!!!注意这一行只是让s3不再指向s1所指向的对象而是指向s4所指向的对象。对于s1来讲它仍然指向原对象。所以不影响s1.
/********************************************************/
1.首先应该肯定:变元传递的是引用(因为变元的类型为对象。);
2.recount方法中有:s3=s4;//它其实并不影响s1.
在main方法中调用recount方法时,情况是这样的:先将s1的指针赋给s3;将s2的指针赋给s4.即s3与s1指向同一个对象,s4与s2指向同一个对象,当程序执行s3=s4时:!!!注意这一行只是让s3不再指向s1所指向的对象而是指向s4所指向的对象。对于s1来讲它仍然指向原对象。所以不影响s1.