当前位置:  技术问答>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;
  }
}

|
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
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的引用没有变


|
1.recount是方法
2.在java中不用考虑什么内存,java的抽象高于这一级别。StingBuffer  sbuff1=StringBuffer("  palm  Beach")生成了一个StringBuffer对象,并让引用sbuff1指向这个对象。
3.sbuff2.append("Floart")改变了sbuff2指向的对象。两个sbuff2不相同,但都指向同一个对象。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • DirectDraw:lpitch的理解
  • 分布式系统的故障独立性如何理解
  • 分布式系统的故障独立性如何理解 iis7站长之家
  • 套接字应该怎么理解
  • c/c++内存堆分配和栈分配理解
  • 如何理解fork函数返回2次啊?
  • 请问下面一句话应该怎样理解?
  • 句柄?句柄?“句柄”到底是什么东西?怎样理解?
  • unsigned char modeflags :5;是如何来理解?
  • 问一个《深入理解计算机系统》中的问题
  • 深度理解try{}cathc(){}
  • 深入理解PHP内核 TIPI
  • 求最容易理解,最容易上手的java书籍,servlet书籍,请指教,谢谢!!
  • 在JTree中的USEROBJECT有什么用处,我一直不理解?
  • 如何理解ResourceBundle和Locale?和应用的场合?谢谢
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • System.gc();怎么理解?
  • system.map文件的作用和理解
  • sembuf.sem_num到底如何理解?--初学者向各位请教
  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • makefile这句话应该则怎么理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3