A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭颖 中级黑马   /  2013-3-26 16:49  /  2086 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 彭颖 于 2013-3-27 21:52 编辑

private static void changeStringValue(Object obj)throws Exception {
                Field[] fields = obj.getClass().getFields();//得到所有字段
                for(Field field:fields){//给一个对象给我,然后扫描到所有成员变量,之后把值b改成a
                        if(field.getType()==String.class){//同一份字节码要用==
                        //field.getType()/*field是一个字段,是有类型的,所以.getType()*/.equals(String.class)
                        String oldValue = (String)field.get(obj);//在对象身上取值,(String)我们知道他是String类型
                        String newValue = oldValue.replace('b', 'a');//替换
                        field.set(obj, newValue);
                        
                        }
--------------------------------------------------------------
对于红色勾勒的语句,String.class是取得String类的字节码,为什么说和取得的所有字段类型(getType)是同一字节码,从而作比较,不是很理解,求指点。

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-27 19:53

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

1 个回复

倒序浏览
    Field[] fields = obj.getClass().getFields();//得到所有字段
                for(Field field:fields){//给一个对象给我,然后扫描到所有成员变量,之后把值b改成a
                        if(field.getType()==String.class){//同一份字节码要用==

你这里是在遍历Field[], 再用if()来判断,该对象中的那些字段的类型。
如果是String.class,你才会替换这个字段的值中的字母。并没有说,取得的所有字段类型是同一字节码
filed.getType,是指当前字段,你当前遍历的某一个字段而已。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马