java.lang.String使用Charset构造函数创建一个,可以注入自己的Charset,从而带来自己的
CharsetDeprer。的
CharsetDeprer到达一个基准
CharBuffer在depreLoop方法对象。CharBuffer包装原始String对象的char
[]。由于CharsetDeprer具有对其的引用,因此您可以使用CharBuffer更改基础char [],因此您具有可变的String。
public class MutableStringTest { // http://stackoverflow.com/questions/11146255/how-to-create-mutable-java-lang-string#11146288 @Test public void testMutableString() throws Exception { final String s = createModifiableString(); System.out.println(s); modify(s); System.out.println(s); } private final AtomicReference<CharBuffer> cbRef = new AtomicReference<CharBuffer>(); private String createModifiableString() { Charset charset = new Charset("foo", null) { @Override public boolean contains(Charset cs) { return false; } @Override public CharsetDeprer newDeprer() { CharsetDeprer cd = new CharsetDeprer(this, 1.0f, 1.0f) { @Override protected CoderResult depreLoop(ByteBuffer in, CharBuffer out) { cbRef.set(out); while(in.remaining()>0) { out.append((char)in.get()); } return CoderResult.UNDERFLOW; } }; return cd; } @Override public CharsetEnprer newEnprer() { return null; } }; return new String("abc".getBytes(), charset); } private void modify(String s) { CharBuffer charBuffer = cbRef.get(); charBuffer.position(0); charBuffer.put("xyz"); }}运行代码打印
abczzz
我不知道如何正确实现depreLoop(),但是我现在不在乎:)



