String类对象的内容一旦初始化就不能改变,知道这个理论是正确的,但是就是想不到错误的例子,请问有那位高手能将错误的例子举出来,让小弟学习学习.
解决方案 »
- 请教大家个 scjp认证里面的试题(标题要长.-------------------------------------------------------)
- 求助 关于组合问题,希望各位前辈、高手给予支持 ....不吝感激
- 那种数据没读完整前只显示图片loading。。。的效果是如何实现的?
- 经典作品--Java解惑谜题连载②
- jfreechart 里面怎么能限定 y轴的最大数字呢?
- 数学和英语对一个程序员很重要吗?
- 请教:正则表达式如何解析JSON
- 我想寻找关于JBuilder4的教程,请问从哪里可以下载呀?
- 运行Eclipse出错?
- 关于嵌套method的存取权限的问题,在线等待!
- java中的readline()方法问题
- JAVA问题
public static void main(String args[]){
String s1="abc";
String s2=s1.concat("def");
String s3=s1.toUpperCase();
System.out.pringln("s2=="+s2);
System.out.println("s3=="+s3);
System.out.println("s1=="+s1);
}
}结果
s2==abcdef
s3==ABC
s1==abc
concat为和并字符串
toUpperCase()查英语字典!
这样你应该理解了吧!自己动动脑我不多解释了,这样印象才深!~
猜测你是想问。为什么String类不能改变,如果是问的这个问题,上面的人回答得都不算完整,其实是下面的答案:
1、因为SUN公司在设计之初是这样设计的,把String尽量偏向于基础数据,国为其使用量与基础数据类似,都用+等,当你对基础数据操作以后,会得到新的结果,但是被操作的数据本身却没有变化,例如:int a ,b,c c=a+b; 这样以后a,b没有变化
2、基于以上信息你就能了解JDK 里面String的设计用意,不难理解jdk里面的String类型根本就没有设计提供更改此对象的方法,这一点你可以参看jdk原码不是String不能被更改,其实是因为sun公司设计的String类没有提供更收的方法,其实我们自己也可以定义这样的类
而该结构体的内存模型在初始化时已经固定 若试图改变该值 将改变指针的地址(若已存在于常量池则直接传地址若常量池无此对象则实例化该对象压栈后传地址给引用)而非指向的对象
String对象一旦初始化就不能改变
这个很明确的写在API文档里了对象没有变,变的是引用只要搞清楚
什么是对象,什么是引用
什么是引用类型,什么是基本类型
就不难理解
s = s + " world!";
s 所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。