StringBuffer 传值的小问题

news/2024/5/20 6:57:37 标签: , 局部变量

下面是一个小例子: 

public static  void main(String []args) {
    StringBuffer str1 = new StringBuffer("good");
    StringBuffer str2 = new StringBuffer("bad");
    test (str1, str2);
    System.out.println(str1.toString());
    System.out.println(str2.toString());
}

public static void test (StringBuffer str1,StringBuffer str2) {
    str1 = str2;
    str1 = new StringBuffer("world");
    str2.append(" test");
}

关于对象输出的一个问题,大家猜猜输出内容是什么。

输出结果:

str1=good
str2=bad test

答案是str1=good 因为在main方法中已经创建一个StringBuffer 在地址中已经存在,在test种方法在进行创建是不会替换main方法中str1中的对象,str2=bad test 是因为对象进行追加所以等于bad test。

如果不理解可以看下面的例子

 public static  void main(String []args) {
        StringBuffer str1 = new StringBuffer("good");
        StringBuffer str2 = new StringBuffer("bad");
        test (str1, str2);
        System.out.println(str1.toString());
        System.out.println(str2.toString());
    }

    public static void test (StringBuffer str1,StringBuffer str2) {
        str1 = str2;
        str1 = new StringBuffer("world");
        str2.append(" test");
        System.out.println("test方法");
        System.out.println(str1.toString());
    }

输出结果: 

test方法
world
good
bad test

在test 方法中str1的输出,我们发现是改变str1的对象啦,在对比main方法中str1可以得出答案,在一个方法中新建对象,只在这个方法是有效的,不会影响其他方法的值。


http://www.niftyadmin.cn/n/1087121.html

相关文章

BZOJ 3354 Hiring

BZOJ 3354 考虑枚举Level1给多少钱 那就是有些人不会来 来的人贪心得从Level最小的开始选 这个贪心正确性显然 哪怎么枚举呢 每个人可以算出给1Level多少钱他才来 对这个值排序,从小到大扫,维护选的人的集合 怎么维护? 对于一个新人能要就要(…

子进程自父进程继承什么或未继承什么

知道子进程自父进程继承什么或未继承什么将有助于我们。下面这个名单会因为 不同Unix的实现而发生变化,所以或许准确性有了水份。请注意子进程得到的是 这些东西的 *拷贝*,不是它们本身。 由子进程自父进程继承到: 进程的资格(真实(real)/有…

对象转换 json 字符串和 json转换对象的几种方式

参考网上的文章,做了一个关于json的总结,进行留存帮助以后阅读,希望可以帮助到大家。 1、使用阿里巴巴的fastjson方式处理。 测试实体类 public class User {// 用户编号private String userNo;// 用户名字private String name;public Str…

【Python基础】05_Python中的while循环

1.程序的三大流程介绍 顺序 —— 从上到下,顺序执行分支 —— 根据条件判断,决定代码的分支循环 —— 让特定代码执行2.while 基本语法 while 条件(判断 计数器 是否达到 目标次数): 条件满足时,做的事情1 条件满足时,做的事情2 ……

设计模式装饰器模式

在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 装饰器模式角色 Component 定义一个对象接口,可以给这些对象动态地添加职责。 ConcreteComponent 是定义了一个…

python 第十四章 装饰器

# 开放封闭原则: # 扩展是开放的(增加新功能) # 修改源码是封闭(修改已经实现的功能)# 在不改变源代码及调用方式的基础下额外增加新的功能# 装饰器:用来装饰的工具# 版一:import time # start_time time.time() # def func(): # time.sleep(2) #睡眠 (模拟网络延时) # …

Java 批量判断参数是否为空 判断集合

判断参数是否为空,是因为在controller层会写很多if else 这样代码很冗余,封装一种方法可以判断参数是否为空,判断集合,是否为0,因为现在业务使用需要判断类型不是很多,如果多种类型可以考虑新增方法去判断&…

第四周周总结

本周未进行相关java学习 主要进行pta练习,数据结构学习,其他相关阅读,下周继续Java学习 转载于:https://www.cnblogs.com/huiwuyan20/p/11258405.html