一道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.