当前位置: 技术问答>java相关
不理解,为什么输出会是这样的;
来源: 互联网 发布时间:2015-04-12
本文导语: void in palm Beach void in palm Beach Floart //---------------------------------- public class cos { public static void main(String[] args) { StringBuffer sbuff1=new StringBuffer(" palm Beach"); StringBuffer sbuff2=new StringBuffer(" palm Beach")...
void in palm Beach
void in palm Beach Floart
//----------------------------------
public class cos {
public static void main(String[] args) {
StringBuffer sbuff1=new StringBuffer(" palm Beach");
StringBuffer sbuff2=new StringBuffer(" palm Beach");
cos.recount(sbuff1,sbuff2);
System.out.println("void in "+sbuff1);
System.out.println("void in "+sbuff2);
}
public static void recount(StringBuffer sbuff1,StringBuffer sbuff2){
sbuff2.append(" Floart");
sbuff1=sbuff2;
}
}
void in palm Beach Floart
//----------------------------------
public class cos {
public static void main(String[] args) {
StringBuffer sbuff1=new StringBuffer(" palm Beach");
StringBuffer sbuff2=new StringBuffer(" palm Beach");
cos.recount(sbuff1,sbuff2);
System.out.println("void in "+sbuff1);
System.out.println("void in "+sbuff2);
}
public static void recount(StringBuffer sbuff1,StringBuffer sbuff2){
sbuff2.append(" Floart");
sbuff1=sbuff2;
}
}
|
recount中的sbuff1、sbuff2是main中sbuff1、sbuff2的拷贝,但指向的StringBuffer是一样的。因此sbuff2.append(" Floart"); 改变了sbuff2指向的StringBuffer,但sbuff1=sbuff2; 不起作用因为这个sbuff1不是main中那个。
|
输出是:void in palm Beach
void in palm Beach Floart
因为recount(StringBuffer sbuff1,StringBuffer sbuff2)中的参数
sbuff1,sbuff2都是引用,所以并不会改变它们在内存中所指向的区域,可是因为StringBuffer对象本身是可变的,所以sbuff2.append方法改变了sbuff2的值。但是sbuff1=sbuff2并不改变sbuff1在内存中指向的位置,因为它是引用的,sbuff1=sbuff2只在方法中有效。
void in palm Beach Floart
因为recount(StringBuffer sbuff1,StringBuffer sbuff2)中的参数
sbuff1,sbuff2都是引用,所以并不会改变它们在内存中所指向的区域,可是因为StringBuffer对象本身是可变的,所以sbuff2.append方法改变了sbuff2的值。但是sbuff1=sbuff2并不改变sbuff1在内存中指向的位置,因为它是引用的,sbuff1=sbuff2只在方法中有效。
|
应该是
void in palm Beach
void in palm Beach Float
调用recount时
sbuff2.append(" Floart"); 使到sbuff2的内容变化了
sbuff1=sbuff2时sbuff1的地址变化了,当跳出函数时
sbuff1还是指向原来地址,结果sbuff1的值没有改变
void in palm Beach
void in palm Beach Float
调用recount时
sbuff2.append(" Floart"); 使到sbuff2的内容变化了
sbuff1=sbuff2时sbuff1的地址变化了,当跳出函数时
sbuff1还是指向原来地址,结果sbuff1的值没有改变
|
sbuff2.append(" Floart"); sbuff2引用的是类中的sbuff2 这个操作改变了
类中的sbuff2变量引用的值 而临时变量sbuff2还是引用类中的sbuff2
sbuff1=sbuff2; 临时变量sbuff1的引用变成sbuff2 而类中的变量sbuff1的引用没有变
类中的sbuff2变量引用的值 而临时变量sbuff2还是引用类中的sbuff2
sbuff1=sbuff2; 临时变量sbuff1的引用变成sbuff2 而类中的变量sbuff1的引用没有变
|
1.recount是方法
2.在java中不用考虑什么内存,java的抽象高于这一级别。StingBuffer sbuff1=StringBuffer(" palm Beach")生成了一个StringBuffer对象,并让引用sbuff1指向这个对象。
3.sbuff2.append("Floart")改变了sbuff2指向的对象。两个sbuff2不相同,但都指向同一个对象。
2.在java中不用考虑什么内存,java的抽象高于这一级别。StingBuffer sbuff1=StringBuffer(" palm Beach")生成了一个StringBuffer对象,并让引用sbuff1指向这个对象。
3.sbuff2.append("Floart")改变了sbuff2指向的对象。两个sbuff2不相同,但都指向同一个对象。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。