读书人

一道java的基础题请大侠们帮忙多谢

发布时间: 2012-06-05 13:54:06 作者: rapoo

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

读书人网 >J2SE开发

热点推荐