Java中String实例对象-其实也可以变-你知道吗?
下文笔者将讲述java中String对象可变的示例分享,如下所示:
String源码
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
/** Cache the hash code for the string */
private int hash; // Default to 0
//...
}
在java的源码中,我们发现String类使用final修饰,
final修饰的类不能被继承,其中的值被一个数组封装,即不能被修改,那么平时我们重新定义String的值又是什么呢?
下文笔者将一一道来,如下所示:
例:下例中,我们又展示了字符串可被修改的一面,那这又是什么呢?
String str = "Java265.com"; System.out.println(str); // java265.com str = "Java"; System.out.println(str); // Java str = str.substring(1); System.out.println(str); // ava
注意事项
1.以上的字符可变,是由于str = 此处会重新指向新的引用
2.substring方法,其实是newString(***)放啊
那么到底如何才能修改字符串中的值呢?
实现思路:
使用反射,即可修改字符串中的值
package com.java265.other;
import java.lang.reflect.Field;
public class Test16 {
/**
* java265.com 示例程序
*
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String str = "Hello maomao";
System.out.println(str); // Hello maomao
Field field = String.class.getDeclaredField("value");
field.setAccessible(true);
char[] value = (char[]) field.get(str);
value[6] = 'a';
value[7] = 'b';
value[8] = 'c';
value[9] = 'd';
value[10] = '!';
value[11] = '!';
System.out.println(str); // Hello abcd!!
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


