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!! } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。