先访照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
这是你在访问就不是原来那个对象了。。。
分享到:
相关推荐
- **知识点拓展**:数据表视图主要用于查看和编辑数据,而字段类型的修改涉及到数据库结构的设计,通常需要在设计视图等专门用于管理数据库结构的界面中完成。 ### 3. Python列表的内存地址 - **题目解析**:在...
本篇将详细解释如何实现这一功能,并拓展到相关的Java基础知识。 首先,我们要了解Java中的字符串是不可变的,这意味着一旦创建了一个字符串对象,就不能更改其内容。因此,当我们需要删除字符串中的特定字符时,...
在Java编程语言中,面试时常会涉及到多个核心概念和技术,以下是对给定文件部分内容的详细解释和相关知识点拓展: 1. **随机生成大写字母**: 你可以使用`Math.random()`方法生成0到1之间的浮点数,然后通过转换为...
2. 提供了关于Java基础知识、API解读、异常处理、线程、集合等核心Java知识点的复习指导。 六、Java基础知识回顾 1. 掌握Java基本概念和API的使用,例如String与StringBuffer的区别、集合类的区别等。 2. 理解Java...
### Java面试笔试题知识点解析 #### 一、面向对象的基本特征 面向对象编程(OOP)是现代软件开发中的一种核心编程范式,它基于...以上是根据题目中的知识点进行的详细解释和拓展,希望能够帮助到准备Java面试的朋友。
第二部分则在此基础上进行拓展,可能包括以下几个关键知识点: 1. **类与对象**:这是面向对象编程的核心。学员会学习如何定义类,创建对象,并理解封装、继承和多态等面向对象原则。 2. **数组与集合框架**:Java...
【Java记事本源代码】是一个使用Java编程语言实现的简单文本编辑器项目。这个记事本程序包含了基本的文字编辑...同时,这也是一个拓展和定制个人化记事本功能的基础,比如添加查找替换的高亮显示、添加拼写检查等功能。
7. **字符串处理**:Java中的String类,字符串的操作方法,以及StringBuilder和StringBuffer类的使用。 8. **异常处理**:异常的定义、分类,try-catch-finally语句的使用,以及自定义异常。 9. **输入输出流**:...
3. **字符串处理**:Java中的String类是不可变的,熟悉它的各种方法,如concat()、substring()、indexOf()、replace()等,以及StringBuilder或StringBuffer用于动态构建字符串。 4. **数组**:理解一维和多维数组的...
创建一个`Random`对象,然后循环32次,每次生成1到9之间的随机数,将其添加到`StringBuffer`中,最后将`StringBuffer`转换为字符串。 在Python中,如果需要生成32位的纯数字随机数,可以使用`random`库的`randint`...
各大科技公司,如三星的GALAXY Gear、苹果的iWatch、索尼的SmartWatch以及爱普生的Pulsense系列智能手表PS-500,都在尝试通过API接口拓展更多的应用场景。 对于开发者来说,想要为智能手表开发出独特且实用的应用,...
对于文本的处理,可以使用Java中的String类的各种方法,如substring()、replace()等,也可以使用StringBuilder或StringBuffer类来进行字符串的拼接和修改。 通过以上内容可以看出,Java课程设计记事本不仅能够帮助...
为了解决这个问题,可以使用`StringBuffer`类,像下面的代码所示,通过数组`__strings__`存储片段,并在最后通过`join("")`合并所有片段。这样可以显著提高性能,特别是在处理大量字符串时。 接着,我们来看如何...