String和StringBuffer同是final类型的,为什么StringBuffer可以修改字符串? String不能修改 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 String,StringBuffer说白了就是个char数组,并提供了大量的方法操作该数组. 但String的char数组是final类型的,也就是说该数组一旦指向一个对象,就不能再指向另外的对象,并且String也并没有提供直接操作char数组的方法.所以String一旦被实例化就不变了. 而StringBuffer的char数组不是final类型的,所以该数组可以动态地指向任何其他对象. 以上的说法只是在没有利用反射的前提下,一旦涉及到反射,以上说法就不一定正确了,比如String对象同样可以变化. 我的一个哥们说 String,StringBuffer一个是在堆上建的,一个是在栈上建的,是这样子吗?? final是修饰变量的,不是修饰对象本身的举例说明: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仍然指向的是那个对象,变化的是对象本身 final修饰类时,是指不能再被继承,跟能不能更改是两码事,至于说,String类为什么内容不能更改,是因为String类没有提供方法给你修改它的内容!如果:String s="abc";s="def";实际上新建了一个“def”的String对象,然后让s重新指向它 问下:string a="a";string b="b";a=a+b+"c";这样a不是被修改了么? string 和 stringbuffer都是堆上建立的 如何在jcombox下拉菜单中显示数据库的一列 很小很小一个问题.......麻烦指点一下.... java(se) 怎么实现窗体的渐显效果 java如何压缩一个空文件夹 JAVA类 如何控制java textarea里一部分文本颜色 在线等。。。请帮我。。 如何读取一个整数 播放声音的APPLET的问题!急啊! 我有一到难题请帮帮小妹。 我今天会结贴的,垃圾回收站的处理机制,是个笔试题。 通过按钮促发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不是被修改了么?