Java中String实例对象-其实也可以变-你知道吗?

java-教程王 Java经验 发布时间:2022-04-10 05:37:11 阅读数:20694 1
下文笔者将讲述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!!
	}
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202204/16495402852807.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者