`
农村哥们
  • 浏览: 293490 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如下关于对象与引用的代码,运行结果分析

 
阅读更多
  1. public class MyClass{   
  2.     static void aMethod(StringBuffer sf1,StringBuffer sf2{   
  3.         sf1.append(sf2);   
  4.         sf2 = sf1;   
  5.     }   
  6.     public static void main(String[] args){   
  7.         StringBuffer sf1 = new StringBuffer("A");   
  8.         StringBuffer sf2 = new StringBuffer("B");   
  9.         aMethod(sf1,sf2);   
  10.         System.out.println(sf1+":"+sf2);   
  11.     }   
  12. }  
public class MyClass{
    static void aMethod(StringBuffer sf1,StringBuffer sf2{
        sf1.append(sf2);
        sf2 = sf1;
    }
    public static void main(String[] args){
        StringBuffer sf1 = new StringBuffer("A");
        StringBuffer sf2 = new StringBuffer("B");
        aMethod(sf1,sf2);
        System.out.println(sf1+":"+sf2);
    }
}

这个结果为啥是AB:B啊?

分析:
1 主方法以引用的方式传递过去了2个对象 StringBuffer
2 方法里也有2个引用作为参数也指向了这2个对象,他们是sf1 和 sf2, 注意此处的sf1和main方法的sf1可不是同一个,他们有着不同的作用域。
3 调用方法,修改了对象的内容,所以此时 sf1指向的对象内容为 AB
4 将方法里的sf2 指向了 sf1, 这个操作之影响调用方法里的参宿引用,并不影响main方法里的引用
5 返回了, main方法里 sf1指向的对象已经变成了 AB, 而sf2指向的对象没有任何变化
分享到:
评论

相关推荐

    java 类与对象代码

    通过分析和运行这些代码,我们可以学习到如何在Java中定义和使用类,理解面向对象编程的概念,如封装、继承和多态。同时,链表的实现有助于理解数据结构和算法,这对于任何Java开发者来说都是至关重要的技能。在实践...

    《Android系统源代码情景分析》

    5.4 Binder对象引用计数技术 5.4.1 Binder本地对象的生命周期 5.4.2 Binder实体对象的生命周期 5.4.3 Binder引用对象的生命周期 5.4.4 Binder代理对象的生命周期 5.5 Binder对象死亡通知机制 5.5.1 ...

    浅谈java面向对象和引用

    ### 浅谈Java面向对象与引用 在Java学习过程中,对于面向对象的理解和引用机制的掌握是至关重要的。本文将围绕这两个概念进行深入探讨,并针对初学者常见的疑惑点进行解答。 #### Java面向对象基础 Java是一种...

    android运行assets apk代码

    "android运行assets apk代码"这个主题就是关于如何实现这样的功能。首先,让我们理解一下核心概念: 1. **Assets目录**:在Android应用的资源结构中,Assets目录是一个特殊的地方,开发者可以将非结构化的数据,如...

    Android系统源代码情景分析-罗升阳-源码

    5.4 Binder对象引用计数技术 5.4.1 Binder本地对象的生命周期 5.4.2 Binder实体对象的生命周期 5.4.3 Binder引用对象的生命周期 5.4.4 Binder代理对象的生命周期 5.5 Binder对象死亡通知机制 5.5.1 注册死亡...

    VC面向对象开发分析与设计实例解析

    《VC面向对象开发分析与设计实例解析》 面向对象编程(OOP)是现代软件开发的核心思想,它以对象为中心,通过封装、继承和多态等机制,提高了代码的复用性和可维护性。在VC++环境下,利用面向对象的方法进行开发,...

    cpp-CppcheckCC代码的静态分析工具

    **cppcheck - C++与C语言的静态代码分析工具** cppcheck是一款强大的开源静态代码分析工具,主要用于检测C++和C语言源代码中的错误、潜在的bug、未初始化的变量、内存泄漏以及风格问题。它在编译之前对源代码进行...

    C#358-运行应用程序,源代码

    在IT领域,C#是一种广泛使用的面向对象的编程语言,由微软公司开发并应用于Windows平台。本主题聚焦于"C#358-运行应用程序",这可能是指一...在实际学习中,通过实践和分析提供的源代码,可以深入理解这些概念和机制。

    JAVA阶段模拟试题

    在Java中,源文件Test.java中包含如下代码段,则程序编译运行结果是()。(选择一项) ```java public class Test{ public static main (String [ ] args) { system.out.print(“Hello!”); } } ``` **知识点...

    ASP.NET的网页代码模型及生命周期

    代码隐藏页模型与单文件页模型不同的是,代码隐藏页模型将事物处理代码都存放在cs文件中,当ASP.NET网页运行的时候,ASP.NET类生成时会先处理cs文件中的代码,再处理.aspx页面中的代码。这种过程被成为代码分离。 ...

    Java面向对象基础练习题

    4. 示例中的TestRef程序,通过简单的变量赋值和对象引用传递来展示基本类型和引用类型的区别。基本类型赋值时值的拷贝,而引用类型赋值则是引用的拷贝。因此,输出结果先是10,然后是11。 5. TestReturnRef程序中...

    java四种创建对象的方式

    需要注意的是,clone方法创建的对象是浅克隆,即只有对象本身被克隆了,如果对象中还有其他对象的引用,那么克隆后的对象中的引用指向的是同一个对象。 4. 反序列化创建对象 反序列化是将已序列化的对象状态转换为...

    C#引用类型的赋值 类的赋值

    #### 四、运行结果解读 程序运行后,输出结果如下: ``` a=1, str="I am a" a=0, str="Default" a=1, str="I am a" a=1, str="I am a" a=2, str="I am b" a=1, str="I am a" a=3, str="I am c" a=3, str="I am c...

    自动引用计数.playground.zip

    无主引用不会增加引用计数,但在对象销毁后尝试访问无主引用会导致运行时错误。 在`自动引用计数.playground`中,可能包含了以下示例代码: 1. 强引用的传递:展示了如何通过函数参数或赋值操作改变对象的引用计数...

    Heap Dump的IBM分析工具.zip

    5. **定位问题**:根据分析结果,查看代码,找出可能导致内存泄漏的代码段,并进行优化。 理解并熟练运用heap dump分析工具是Java开发者必备的技能之一,这有助于提高应用程序的性能和稳定性。通过IBM的工具,我们...

    关于C#面向对象编程

    面向对象编程(Object-Oriented Programming,OOP)是软件开发中的一种核心编程范式,C#语言以其强大的面向对象特性成为开发人员的首选工具之一。在C#中,面向对象编程主要涉及三个核心概念:封装、继承和多态。 **...

    qt调用c语言代码(c语言的代码写在c文件中)

    6. **编译和运行Qt项目**:最后,使用qmake和make(或者直接在IDE中编译)来构建Qt项目,然后运行生成的应用程序,你应该能看到C语言代码的功能得以实现。 以上就是Qt调用C语言代码的基本流程。这个过程可能会涉及...

    PHP对象相互引用的内存溢出实例分析

    同时,掌握正确的对象复制(浅复制和深复制)、引用使用(包括变量引用、函数引用和对象引用)以及如何利用`__destruct()`等特殊方法,都是避免类似问题的关键。 总之,PHP中的对象相互引用可能导致内存无法释放,...

Global site tag (gtag.js) - Google Analytics