`

关于StringBuffer的拓展

SUN 
阅读更多
先访照StringBuffer的append写个类
public  class Sun {
	public String value="ok";
	public void append(String str){
		value=str;
	}
}


public class testReturnthis {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Sun s=new Sun();		
		new testReturnthis().append(s);
		System.out.println(s.value);
	}
	public void append(Sun s){
		s.append("a");
		s.value="b";
		s=new Sun();
		System.out.println(s.value);
	}

}


是不是和StringBuffer的差不多呢,只是StringBuffer操作的是数组,我们这操作的是对象的一个String属性的值。。。。
打印什么呢???
ok
b
你可能发现对属性赋得值都起作用了。。但下面的对new Sun引用的赋值却不起作用,同样是在一个方法里,为什么会有区别呢???看字节码 解释
public void append(Sun sun)
    {
    //    0    0:aload_1      加载参数1 也就是Sun sun   
    //    1    1:ldc1            #10  <String "a">加载常量池入口为#10的字符串。
    //    2    3:invokevirtual   #11  <Method void Sun.append(String)>
    //    3    6:aload_1         同上
    //    4    7:ldc1            #12  <String "b">同上
    //    5    9:putfield        #8   <Field String Sun.value>对Sun的属性赋值,入口是#8
    //    6   12:new             #2   <Class Sun>
    //    7   15:dup             
    //    8   16:invokespecial   #3   <Method void Sun()>创建Sun()对象
    //    9   19:astore_1        放入局域变量1中保存 
    //   10   20:getstatic       #7   <Field PrintStream System.out>
    //   11   23:aload_1         这时对象发生改变 不是刚才的Sun了
    //   12   24:getfield        #8   <Field String Sun.value>
    //   13   27:invokevirtual   #9   <Method void PrintStream.println(String)>
    //   14   30:return          
    }



程序改成这样
public class testReturnthis {
	public static void main(String[] args) {
		Sun s=new Sun();
		new testReturnthis().append(s);
		System.out.println(s.value);
	}
	public void append(Sun s){
		s.append("a");
		//s.value="b";
		s=new Sun();
		System.out.println(s.value);
	}
}


打印出
ok
a

最后总结

也就是说
在方法中赋值的是索引,更改所以的属性值也就是改的是对象的属性的值
但索引不会变!!
而如果给对象换引用,他其实并没有赋给他!而是替换了原来对象在方法中的位置!astore1
这是你在访问就不是原来那个对象了。。。
分享到:
评论

相关推荐

    2021-2022计算机二级等级考试试题及答案No.11821.docx

    - **知识点拓展**:数据表视图主要用于查看和编辑数据,而字段类型的修改涉及到数据库结构的设计,通常需要在设计视图等专门用于管理数据库结构的界面中完成。 ### 3. Python列表的内存地址 - **题目解析**:在...

    JAVA 从一个字符串中删除指定字符

    本篇将详细解释如何实现这一功能,并拓展到相关的Java基础知识。 首先,我们要了解Java中的字符串是不可变的,这意味着一旦创建了一个字符串对象,就不能更改其内容。因此,当我们需要删除字符串中的特定字符时,...

    2022年JAVA面试集.doc

    在Java编程语言中,面试时常会涉及到多个核心概念和技术,以下是对给定文件部分内容的详细解释和相关知识点拓展: 1. **随机生成大写字母**: 你可以使用`Math.random()`方法生成0到1之间的浮点数,然后通过转换为...

    java面试小技巧1

    2. 提供了关于Java基础知识、API解读、异常处理、线程、集合等核心Java知识点的复习指导。 六、Java基础知识回顾 1. 掌握Java基本概念和API的使用,例如String与StringBuffer的区别、集合类的区别等。 2. 理解Java...

    java面试笔试题大汇总

    ### Java面试笔试题知识点解析 #### 一、面向对象的基本特征 面向对象编程(OOP)是现代软件开发中的一种核心编程范式,它基于...以上是根据题目中的知识点进行的详细解释和拓展,希望能够帮助到准备Java面试的朋友。

    Java教程5-8第二部分

    第二部分则在此基础上进行拓展,可能包括以下几个关键知识点: 1. **类与对象**:这是面向对象编程的核心。学员会学习如何定义类,创建对象,并理解封装、继承和多态等面向对象原则。 2. **数组与集合框架**:Java...

    Java记事本源代码

    【Java记事本源代码】是一个使用Java编程语言实现的简单文本编辑器项目。这个记事本程序包含了基本的文字编辑...同时,这也是一个拓展和定制个人化记事本功能的基础,比如添加查找替换的高亮显示、添加拼写检查等功能。

    Java经典入门+笔记

    7. **字符串处理**:Java中的String类,字符串的操作方法,以及StringBuilder和StringBuffer类的使用。 8. **异常处理**:异常的定义、分类,try-catch-finally语句的使用,以及自定义异常。 9. **输入输出流**:...

    Java零基础配套练习题51道完整版

    3. **字符串处理**:Java中的String类是不可变的,熟悉它的各种方法,如concat()、substring()、indexOf()、replace()等,以及StringBuilder或StringBuffer用于动态构建字符串。 4. **数组**:理解一维和多维数组的...

    python生成大写32位uuid代码

    创建一个`Random`对象,然后循环32次,每次生成1到9之间的随机数,将其添加到`StringBuffer`中,最后将`StringBuffer`转换为字符串。 在Python中,如果需要生成32位的纯数字随机数,可以使用`random`库的`randint`...

    智能手表开发API接口

    各大科技公司,如三星的GALAXY Gear、苹果的iWatch、索尼的SmartWatch以及爱普生的Pulsense系列智能手表PS-500,都在尝试通过API接口拓展更多的应用场景。 对于开发者来说,想要为智能手表开发出独特且实用的应用,...

    java课程设计记事本.doc

    对于文本的处理,可以使用Java中的String类的各种方法,如substring()、replace()等,也可以使用StringBuilder或StringBuffer类来进行字符串的拼接和修改。 通过以上内容可以看出,Java课程设计记事本不仅能够帮助...

    JavaScript常用脚本汇总(三)

    为了解决这个问题,可以使用`StringBuffer`类,像下面的代码所示,通过数组`__strings__`存储片段,并在最后通过`join("")`合并所有片段。这样可以显著提高性能,特别是在处理大量字符串时。 接着,我们来看如何...

Global site tag (gtag.js) - Google Analytics