java反射set方法_面试宝典Java基础 [ PART 02 ]

1. 如何改变String类的值,保证地址不变

我们都知道String是一个不可变类,因为它的源码内部维护着一个final修饰的char数组,final修饰的变量不可以被改变,修饰的方法不可以被重写,修饰的类不可以被继承:(简要源码)

public final class String    implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */    private final char value[];}

也就是说:String对象一旦创建,就不可改变。拼接、截取或者重新赋值都是在重新建对象。做一下代码演示:

/**  * @Author 程Sir * @Version 2020年3月 * @description 描述:字符串不可以被改变 */public class Demo {
         public static void main(String[] args) throws IOException {
            String str = "不变的字符串";        System.out.println( str +" : " + str.hashCode());        str = str.substring(2);        System.out.println(str +" : " + str.hashCode());                str = str+1;        System.out.println( str +" : " + str.hashCode());    }}

输出的结果是:

1. 不变的字符串 : 833613543. 的字符串 : 9273273272. 的字符串1 : -1317623886

通过演示表明:hashcode值每次都是不一样的。说明操作的不是同一对象,再次过程中有新的对象被创建。

我们学习了反射机制,了解到:反射是在运行期能够对类的属性、方法进行操作。即:运行期绑定。那么我们是不是可以在String运行期对它的值进行一个完美操作了,答案是肯定的,完全可以的,看以下代码:

/** * @Author 程Sir * @Version 2020年3月 * @description 描述:字符串不可以被改变 */public class Demo {
         public static void main(String[] args) throws IOException {
            String str = "不变的字符串";        System.out.println( str +" : " + str.hashCode());                try {
                //反射通过属性拿到值,Sting类的属性char数组的属性名为:value            Field field = str.get
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值