日期:2014-05-20  浏览次数:20683 次

一道java的基础题,请大侠们帮忙,谢谢
10、String或StringBuffer类的对象在调用以下哪个方法时其自身会发生更改?
A) String类的charAt()方法。
B) String类的toUpperCase()方法。
C) String类的replace()方法。
D) StringBuffer类的reverse ()方法。
E) StringBuffer类的length ()方法。


------解决方案--------------------
帮你顶起,这好像是高级java的知识,我晕死了,不懂啊。
------解决方案--------------------
探讨

引用:

1.String实例的不可改变,并非仅仅因为String是final类

2.实际上,如果使用反射的话,还是可以改变String的内容。

就题目来说,毫无悬念是选 D

选D没错

------解决方案--------------------
实例不可更改的充分必要条件:
1.类必须定义为final,否则如果混进来一个子类,然后子类定义的变量被修改了,这个怎么算?
2.类的所有变量必须不能是public的,如果是非系统类,则必须全部是private,以防止变量直接被修改
3.类不得对外提供会影响类的变量值的方法,比如set方法。如果有的话,不得对外开放。类似于第2条,如果是系统类,这些方法不能是public,如果是非系统类,则必须是private

4.如果使用反射语法,则以上条件统统作废....

总结: 在不使用反射的情况下,必须满足1,2,3条,一个类的实例的内容才是不可改变的
------解决方案--------------------
Strings are constant; their values cannot be changed after they
are created. String buffers support mutable strings.