文档章节

java学习笔记-通过java反射改变String的值

Zsman
 Zsman
发布于 2016/07/19 17:21
字数 261
阅读 49
收藏 0

java中的String类是final,即不可变的,这两天看了一下java的反射,于是就想,能不能通过反射来使String的值改变。

public static void main (String[] args) throws NoSuchFieldException, IllegalAccessException {
   String s = "我是小明";
   System.out.println(s);
   System.out.println("改变前的hashCode:"+s.hashCode());
   Class stringClass = s.getClass();
   //获取Stringvalue属性 getDeclaredField方法为获取一个类的指定属性,若该属性不存在会抛出NoSuchFieldException异常
   Field valueField = stringClass.getDeclaredField("value");
   //因为value的修饰符是private,所以要通过setAccessible方法获取访问权限
   valueField.setAccessible(true);
   char[] chars = {'','','',''};
   //第一个参数是一个Object对象,这里要修改s,所以传入s,第二个参数也是Object类型,
   // 因为Stringvaluechar数组,故这里传入一个char数组,
   // 若没取得访问权限则会抛出一个IllegalAccessException安全权限异常
   valueField.set(s,chars);
   System.out.println(s);
   System.out.println("改变后的hashCode:"+s.hashCode());
}

可以看到两次输出的hashCode值都一样,这就说明String的值被改变了

© 著作权归作者所有

Zsman
粉丝 0
博文 1
码字总数 261
作品 0
宿州
私信 提问
最最最常见的Java面试题总结——第二周

String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性   String类中使用字符数组:保存字符串,所以String对象是...

Amsour丶
2018/08/13
0
0
云妹总结了一些最最最常见的Java面试题供大家参考

云妹导读:String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性 String类中使用字符数组:private final cha...

阿里云科技快讯
2018/08/17
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
Java 私塾第一、二章笔记整理

Java 私塾第一、二章笔记整理 第一章 java入门 一.Java是什么? 一种计算机编程语言 一种软件开发平台 一种软件运行平台(JRE :java runtime environment) 一种软件部署环境 二.Java版本:...

luodis
2011/01/14
245
2
111 多线程JUC包下代码分析

Java多线程系列目录(共43篇) AtomicLongFieldUpdater:通过反射+CAS实现对传入对象的指定long字段实现类似AtomicLong的操作 http://www.cnblogs.com/skywang12345/p/javathreadscategory.ht...

素雷
2017/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
1
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
2
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部