String不能修改
解决方案 »
- 高分求“学生信息管理系统”的源代码 用Swing做的
- 怎么定义一个类(或者interface什么的),让它的实例必须实现指定的函数
- 一个比较复杂的问题
- can't be cast to java.lang.Comparable?
- 面试题,给出一个字符串,要求最后以这个给出的字符串的反顺序输出。。。菜鸟问题。。。求答案。。
- 请比较一下,《java编程思想》和《深入Java虚拟机》
- 菜鸟请大家来帮忙做个面试题!
- 类在什么时侯可以定义为private
- together for eclipse软件在那里下载?
- SUN忘解决的大问题!!!!!!!!!!!!
- 我今天会结贴的,垃圾回收站的处理机制,是个笔试题。
- 通过按钮促发treeModel.reload()后,怎么重新聚焦?
但String的char数组是final类型的,也就是说该数组一旦指向一个对象,就不能再指向另外的对象,并且String也并没有提供直接操作char数组的方法.所以String一旦被实例化就不变了.
而StringBuffer的char数组不是final类型的,所以该数组可以动态地指向任何其他对象.
以上的说法只是在没有利用反射的前提下,一旦涉及到反射,以上说法就不一定正确了,比如String对象同样可以变化.
final String s = "hello";
这里final是修饰变量s的,而不是修饰"hello"
至于说String不能修改,是因为String类是immutable的,就是不能修改的意思,immutable也是一个修饰符final StringBuffer sb = new StringBuffer("hello");
这里final修饰了sb,sb就不能指向其它对象了
比如sb = new StringBuffer("hi");这样是不允许的
但是sb所指向的那个对象本身还是可以改变的
比如sb.append(" world");是允许的,因为sb并没有变,sb仍然指向的是那个对象,变化的是对象本身
String类为什么内容不能更改,是因为String类没有提供方法给你修改它的内容!
如果:
String s="abc";
s="def";
实际上新建了一个“def”的String对象,然后让s重新指向它
string a="a";
string b="b";
a=a+b+"c";
这样a不是被修改了么?